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、循环若干次

具体的代码请下载(下列链接任一均可):

1、C语言Linux的Ping程序源代码–LitePing

2、源代码下载点2

3、CSDN资源下载

Ubuntu 7.10 i386版、SuSE 10 Enterprise版测试通过,搜索关键字”Linux Ping 源代码”。

Tags: , ,

2条 关于《Linux下ping程序的实现》的评论

  1. 淘淘 说道:

    我的博客出问题了!!!!不能留言了!!!花花救命 阿!

  2. 程鹏辉 说道:

    你的源代码,在redhat9中,用gcc编译后ping不同任何网络。不知为什么。

发表您的高见:

    主题制作者:Directory JournalElegant Directory