ICMP包发送:
/*发送ICMP回显请求包*/
static void* icmp_send(void *argv)
{
/*保存程序开始发送数据的时间*/
gettimeofday(&tv_begin, NULL);
while(alive)
{
int size = 0;
struct timeval tv;
gettimeofday(&tv, NULL); /*当前包的发送时间*/
/*在发送包状态数组中找一个空闲位置*/
pingm_pakcet *packet = icmp_findpacket(-1);
if(packet)
{
packet->seq = packet_send; /*设置seq*/
packet->flag = 1; /*已经使用*/
gettimeofday( &packet->tv_begin, NULL); /*发送时间*/
}
icmp_pack((struct icmp *)send_buff, packet_send, &tv, 64 );
/*打包数据*/
size = sendto (rawsock, send_buff, 64, 0, /*发送给目的地址*/
(struct sockaddr *)&dest, sizeof(dest) );
if(size <0)
{
perror("sendto error");
continue;
}
packet_send++; /*计数增加*/
/*每隔1s,发送一个ICMP回显请求包*/
sleep(1);
}
}