ping命令工作原理詳細解析

內容簡介:

  ping的原理就是首先建立通道,然後傳送包,對方接受後返回信息,這個包至少包括以下內容,傳送的時候,包的內容包括對方的ip地址和自己的地址,還有序列數,回送的時候包括雙方地址,還有時間等,主要是接受方在都是在作業系統核心里做好的,時刻在監聽,提供一段c程式的代碼,希望對大家有用。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define packet_size 4096
#define max_wait_time 5
#define max_no_packets 3

char sendpacket[packet_size];
char recvpacket[packet_size];
int sockfd,datalen=56;
int nsend=0,nreceived=0;
struct sockaddr_in dest_addr;
pid_t pid;
struct sockaddr_in from;
struct timeval tvrecv;

void statistics(int signo);
unsigned short cal_chksum(unsigned short *addr,int len);
int pack(int pack_no);
void send_packet(void);
void recv_packet(void);
int unpack(char *buf,int len);
void tv_sub(struct timeval *out,struct timeval *in);

void statistics(int signo)
{ printf("\n--------------------ping statistics-------------------\n");
printf("%d packets transmitted, %d received , %%%d lost\n",nsend,nreceived,
(nsend-nreceived)/nsend*100);
close(sockfd);
exit(1);
}

/*校驗和算法*/
unsigned short cal_chksum(unsigned short *addr,int len)
{ int nleft=len;
int sum=0;
unsigned short *w=addr;
unsigned short answer=0;

/*把icmp報頭二進制數據以2位元組為單位累加起來*/
while(nleft>1)
{ sum+=*w++;
nleft-=2;
}