//在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");
}