ICMP協議寫的ping函式

2022-08-19 13:00:15 字數 2063 閱讀 2869

icmp是(internet control message protocol)internet控制

報文協議。它是

tcp/ip協議族

的乙個子協議,用於在ip主機、

路由器之間傳遞控制訊息。控制訊息是指

網路通不通、

主機是否可達、

路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使用者資料的傳遞起著重要的作用。

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

if( nleft == 1)

sum = (sum >> 16) + (sum & 0xffff);

sum += (sum >> 16);

answer = ~sum;

return answer;

}int ping( char *ips, int timeout)

timeo.tv_sec = timeout / 1000;

timeo.tv_usec = timeout % 1000;

if (setsockopt(sockfd, sol_socket, so_sndtimeo, &timeo, sizeof(timeo)) == -1)

memset(sendpacket, 0, sizeof(sendpacket));

// pid ping sequence id

pid=getpid();

int i,packsize;

icmp=(struct icmp*)sendpacket;

icmp->icmp_type=icmp_echo;

icmp->icmp_code=0;

icmp->icmp_cksum=0;

icmp->icmp_seq=0;

icmp->icmp_id=pid;

packsize=8+56;

tval= (struct timeval *)icmp->icmp_data;

gettimeofday(tval,null);

icmp->icmp_cksum=cal_chksum((unsigned short *)icmp,packsize);

n = sendto(sockfd, (char *)&sendpacket, packsize, 0, (struct sockaddr *)&addr, sizeof(addr));

if (n < 1)

countnum = 0;

while(countnum++//accept

memset(recvpacket, 0, sizeof(recvpacket));

int fromlen = sizeof(from);

n = recvfrom(sockfd, recvpacket, sizeof(recvpacket), 0, (struct sockaddr *)&from, &fromlen);

if (n < 1)

// check this echo reply if belong to myself

char *from_ip = (char *)inet_ntoa(from.sin_addr);

printf("fomr ip:%s.\n",from_ip);

if (strcmp(from_ip,ips) != 0)

iph = (struct ip *)recvpacket;

icmp=(struct icmp *)(recvpacket + (iph->ip_hl<<2));

printf("ip:%s,icmp->icmp_type:%d,icmp->icmp_id:%d.\n",ips,icmp->icmp_type,icmp->icmp_id);

//check reply contents

if (icmp->icmp_type == icmp_echoreply && icmp->icmp_id == pid)

else

}close(sockfd);

if(ret == success)

else

return ret;

}

ICMP協議之ping實現

1.相關icmp協議概述 這裡只講解與ping有關的icmp訊息型別,主機傳送回送訊息 type 8 被請求主機回送響應訊息 type 0 基本格式如下 回送訊息 echo 回送響應訊息 echo reply 其中 code 0,checksum為校驗和,重點注意從icmp的頭部 即type開始 到...

ping 原理與ICMP協議

ping 原理與icmp協議 ping的原理 ping程式是用來探測主機到主機之間是否可通訊,如果不能ping到某台主機,表明不能和這台主機建立連線。ping使用的是icmp協議,它傳送icmp回送請求訊息給目的主機。icmp協議規定 目的主機必須返回icmp回送應答訊息給源主機。如果源主機在一定時...

ping 原理與ICMP協議

ping 的原理 ping 程式是用來探測主機到主機之間是否可通訊,如果不能ping到某台主機,表明不能和這台主機建立連線。ping 使用的是icmp協議,它傳送icmp回送請求訊息給目的主機。icmp協議規定 目的主機必須返回icmp回送應答訊息給源主機。如果源主機在一定時間內收到應答,則認為主機...