簡易ping程式

2021-06-05 10:51:04 字數 1891 閱讀 8465

手動新增檢驗和後正常。

原因:可能是baidu伺服器並沒有檢測校驗和就返回乙個echo,這樣可以減少伺服器的負擔。

而其他一些站點都會校驗。

注意點:ipv4的icmp,在原始套接字收到後,收到的是包含ip頭在內的完整資料報

ipv6的icmp,則是去除所有ip頭和擴充套件頭部的淨載荷。

#include "unp.h"

#include #include #include #include char sendbuf[maxline], recvbuf[maxline];

int datalen = 56, nseq = 0;

int sockfd;

struct sockaddr_in dst, src;

socklen_t dstlen, srclen;

void callfunc(int signo) ;

void send_icmp( ) ;

void recv_icmp();

unsigned short icmp_cksum(unsigned short *addr, int len);

int main( int argc, char **argv)

char buf[100];

struct addrinfo *addr, hints, *next;

struct sockaddr *servaddr;

struct sockaddr_in *temp;

bzero(&hints, sizeof(struct addrinfo));

hints.ai_family = af_unspec;

getaddrinfo(argv[1], null, &hints, &addr);

for(; addr != null; addr = addr->ai_next)

sockfd = socket(af_inet, sock_raw, ipproto_icmp);

setuid(getuid());

signal(sigalrm, callfunc);

callfunc(sigalrm);

for(;;)

}void callfunc(int signo)

void send_icmp( )

void cal_time(struct timeval *time1, struct timeval *time2)

void recv_icmp()

//printf("return a echo\n");

ip = (struct ip *)recvbuf;

hl = ip->ip_hl;

hl = hl<< 2;

icmp = (struct icmp *)(recvbuf + hl);

if(icmp == null)

printf("icmp is null\n");

assert(icmp);

assert(recvbuf);

rtime = (struct timeval *)malloc(sizeof(struct timeval));

if((icmp->icmp_type == 0) && (icmp->icmp_code == 0) &&(icmp->icmp_id == 88))

}unsigned short icmp_cksum(unsigned short *addr, int len)

if (nleft == 1)

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

sum += (sum >> 16);

answer = ~sum;

return(answer);

}

「ping」程式知多少

最近閱讀了 tcp ip詳解 卷1 協議 作者對 tcp ip協議族 進行了詳細的介紹,讓讀者對網際網路上執行的協議有了乙個全面的了解。本書共三十章,協議的總數也很多,不失為一本很好的網路參考書。我們經常使用 ping 來測試網路的連通性,想必大家對 ping 127.0.0.1 不會感到陌生。本文...

ping程式的實現

最近在看些windows下網路程式設計問題。看到原始套接字的使用,於是看了ping程式的功能實現。大部分人用ping命令只是作為檢視另乙個系統的網路連線是否正常的一種簡單方法。這裡我介紹下在windows下實現ping程式的兩種方法。一是使用原始套接字的方法 如下 include pragmacom...

c 封裝ping程式類

標頭檔案 pragma once include class cping 原始檔 include stdafx.h include ping.h include pragma comment lib,ws2 32.lib define icmp echo 8 定義回顯報文 define icmp e...