UDP 发包程序

来源:互联网 发布:威新软件科技园 编辑:程序博客网 时间:2024/05/17 01:12

//在Vc上排版得好好的,放上这里就乱了。

// sendPktCmd.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
#include <stdlib.h>
#ifdef WIN32
#include <Winsock2.h>
#include <Ws2tcpip.h>
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#endif

 

#define  MAX_BUF_NUM  2048


void print_help_msg();
int main(int argc, char* argv[])
{
 int m_hSocket = -1;
 struct sockaddr_in m_dstAddr;
 struct sockaddr_in src_addr;
 char m_SndBuffer[MAX_BUF_NUM];
 int passed_interval_num = 0;
 int i = 0;
 int interval;
 int packetNum_per_interval;
 int interval_num;
 int packet_size;
 int ttl;

#ifdef WIN32
 WSADATA wsaData;
 WSAStartup(0x0202, &wsaData);
#endif
 

 if(argc != 9 )
 {
  print_help_msg();
  return -1;
 }
 interval = atoi(argv[5]);
 packetNum_per_interval = atoi(argv[6]);
 interval_num = atoi(argv[7]);
 packet_size = atoi(argv[8]);

 memset(m_SndBuffer,'a',sizeof(m_SndBuffer));
 
 memset(&m_dstAddr,0, sizeof(m_dstAddr));  
 m_dstAddr.sin_addr.s_addr = inet_addr(argv[3]);
 m_dstAddr.sin_port = htons(atoi(argv[4]));
 m_dstAddr.sin_family = AF_INET;
 
 memset(&src_addr, 0,sizeof(src_addr));
 
 
 src_addr.sin_addr.s_addr = inet_addr(argv[1]);
 src_addr.sin_port = htons(atoi(argv[2]));
 src_addr.sin_family = AF_INET;

 if ((m_hSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
 {
  perror("socket");
  return -1;
 }
 if(-1 ==bind(m_hSocket,(struct sockaddr *)&src_addr,sizeof(src_addr)) )
 {
  perror("bind");
  return -1;
 }
 
 ttl = 8;
 if(-1 == setsockopt(m_hSocket,IPPROTO_IP,IP_TTL,(char   *)&ttl,sizeof(int)))
  {
    perror("setsockopt to set ttl");
    return -1;
  }
 
 while(passed_interval_num < interval_num)
 {
  for (i=0;i<packetNum_per_interval;i++)
  {
   if (sendto(m_hSocket, m_SndBuffer, packet_size, 0, (struct sockaddr *)&m_dstAddr, sizeof(m_dstAddr)) == -1)
   {
    perror("sendto");  
   }
  }
#ifdef WIN32
  Sleep(interval*1000);//the unit is ms
#else
  sleep(interval);//the unit is second
#endif
  ++passed_interval_num;
 }
#ifdef WIN32 
 closesocket(m_hSocket);
 WSACleanup();
#else
 close(m_hSocket);
#endif
 return 0; 
}

void print_help_msg()
{
 printf("input error:/n");
 printf("the pararmeter is below:/n /
 src ip/n /
 src port/n /
 des ip(10.220.2.244)/n /
 des port/n /
 interval(unit is second)/n /
 packetNum_per_interval/n /
 interval_num/n /
 packet_size/n /
 /n");
}

原创粉丝点击