Linux下ping程序的实现
前段时间有门计算机网络通信技术(软件),需要一个Linux下的Ping,仔细看了几天书和网上的代码,我写了个简化的版本,几乎没有任何的错误处理,全部使用库函数和系统预定义的结构体,比网上的要容易理解一些。要是有的人想迅速理解ICMP实现的Ping程序,看这个版本能比较快的找到头绪。
大致说明一下,程序的结构为:
1、定义原始套接字,使用ICMP协议
sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
2、填充ICMP报头,记录当前系统时间,ICMP报头中的type设置为ICMP_ECHO,也就是要求对方主机回复一个type为ICMP_ECHOREPLY的包
sendtime = (struct timeval *)(sendbuf+sizeof(struct icmphdr));
gettimeofday(sendtime, NULL);
3、使用sendto函数发送,然后使用recvfrom函数接受回应
4、再次读取系统时间,计算数据包往返的时间
5、循环若干次
具体的代码请下载(下列链接任一均可):
2、源代码下载点2
3、CSDN资源下载
Ubuntu 7.10 i386版、SuSE 10 Enterprise版测试通过,搜索关键字”Linux Ping 源代码”。
Tags: C/C++ , Linux , Programming
2008年4月12日 12:21 下午
我的博客出问题了!!!!不能留言了!!!花花救命 阿!
2008年11月6日 7:24 下午
你的源代码,在redhat9中,用gcc编译后ping不同任何网络。不知为什么。