linuxÏÂpingµÄcÓïÑÔʵÏÖ ÏÂÔر¾ÎÄ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/2/28 6:46:10ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

linuxÏÂpingµÄCÓïÑÔʵÏÖ£¨×ª£©

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include in.h> 8 #include 9 #include 10 #include 11 #include 12 #include

13 #define PACKET_SIZE 4096 14 #define MAX_WAIT_TIME 5 15 #define MAX_NO_PACKETS 3 16 char sendpacket[PACKET_SIZE]; 17 char recvpacket[PACKET_SIZE]; 18 int sockfd,datalen=56; 19 int nsend=0,nreceived=0; 20 struct sockaddr_in dest_addr;

21 pid_t pid;

22 struct sockaddr_in from; 23 struct timeval tvrecv; 24 void statistics(int signo);

25 unsigned short cal_chksum(unsigned short *addr,int len);

26 int pack(int pack_no); 27 void send_packet(void); 28 void recv_packet(void); 29 int unpack(char *buf,int len);

30 void tv_sub(struct timeval *out,struct timeval *in); 31 void statistics(int signo) 32 {

33 printf(\statistics-------------------\\n\

34 printf(\received , %%%d

lost\\n\ 35 close(sockfd); 36 exit(1); 37 }

38 /*УÑéºÍËã·¨*/

39 unsigned short cal_chksum(unsigned short *addr,int len)

40 { 41 int nleft=len; 42 int sum=0;

43 unsigned short *w=addr; 44 unsigned short answer=0; 45

46 /*°ÑICMP±¨Í·¶þ½øÖÆÊý¾ÝÒÔ2×Ö½ÚΪµ¥Î»ÀÛ¼ÓÆðÀ´*/ 47 while(nleft>1) 48 { 49 sum+=*w++; 50 nleft-=2; 51 }

52 /*ÈôICMP±¨Í·ÎªÆæÊý¸ö×Ö½Ú£¬»áÊ£ÏÂ×îºóÒ»×Ö½Ú¡£°Ñ×îºóÒ»¸ö×Ö½ÚÊÓΪһ¸ö2×Ö½ÚÊý¾ÝµÄ¸ß×Ö½Ú£¬Õâ¸ö2×Ö½ÚÊý¾ÝµÄµÍ×Ö½ÚΪ0£¬¼ÌÐøÀÛ¼Ó*/ 53 if( nleft==1) 54 {

55 *(unsigned char *)(&answer)=*(unsigned char *)w;

56 sum+=answer;