ping源码程序分析.docx
《ping源码程序分析.docx》由会员分享,可在线阅读,更多相关《ping源码程序分析.docx(14页珍藏版)》请在第一文库网上搜索。
1、ping源码分析10.4.1Ping简介Ping是网络中应用非常广泛的一个软件,它是基于ICMP协议的。下面首先对ICMP协议做一简单介绍。ICMP是IP层的一个协议,它是用来探测主机、路由维护、路由选择和流量控制的。ICMP报文的最终报宿不是报宿计算机上的一个用户进程,而是那个计算机上的IP层软件。也就是说,当一个带有错误信息的ICMP报文到达时,IP软件模块就处理本身问题,而不把这个ICMP报文传送给应用程序。ICMP报文类型有:回送(ECHO)回答(0);报宿不可到达(3);报源断开(4);重定向(改变路由)(5);回送(ECHO)请求(8);数据报超时(11);数据报参数问题(12);
2、时间印迹请求(13);时间印迹回答(14);信息请求(15);信息回答(16);地址掩码请求(17);地址掩码回答(18)o虽然每种报文都有不同的格式,但它们开始都有下面三段:一个8位整数报文TYPE(类型)段;一个8位CODE(代码码)段,提供更多的报文类型信息;一个16位CHECKSUM(校验和)段;此外,报告差错的ICMP报文还包含产生问题数据报的网际报头及前64位数据。一个ICMP回送请求与回送回答报文的格式如表10.17所示。表10.17ICMP回送请求与回送回答报文格式类型CODE校验和CHECKSUM标识符序列号嵌入式1inUX应用程序开发详解一第10章、嵌入式1inUX网络编程
3、数据10. 4.2Ping源码分析下面的Ping.c源码是在busybox里实现的源码。在这个完整的Ping.c代码中有较多选项的部分代码,因此,这里先分析除去选项部分代码的函数实现部分流程,接下来再给出完整的Ping代码分析。这样,读者就可以看到一个完整协议实现应该考虑到的各个部分。1 .Ping代码主体流程Ping,c主体流程图如下图10.8所示。另外,由于Ping是IP层的协议,因此在建立SOCket时需要使用SOCK_RAW选项。在循环等待回应信息处,用户可以指定“-f”洪泛选项,这时就会使用SeIeCt函数来指定在一定的时间内进行回应。2 .主要选项说明山调试选项f:洪泛选项i:等待
4、选项r:路由选项1:广播选项Ping函数主要有以下几个选项:(F_SO_DEBUG)(F_F1OOD)(F_INTERVA1)(F_RROUTE)(MU1TICASTNO1OOP)对于这些选项,尤其是路由选项、广播选项和洪泛选项都会有不同的实现代码。另外,ping函数可以接受用户使用的S1GINT和SIGA1ARM信号来结束程序,它们分别指向了不同的结束代码,请读者阅读下面相关代码。图10.8Ping主体流程图3 .源代码及注释(1)主体代码Ping代码的主体部分可以四部分,首先是一些头函数及宏定义:#inc1ude#inc1ude#inc1ude#inc1ude#inc1ude#inc1ud
5、e4inc1ude#inc1ude4inc1ude#inc1ude4inc1udeinc1ude#inc1ude#inc1ude4inc1ude#inc1ude#inc1ude#inc1udedefineF_F100DOxOO1defineF_INTERVA10x0024defineF_NUMERIC0x004defineF_PINGFI11ED0x008defineF_QUIET0x010defineF_RR0UTE0x020#CIefineF_S0_DEBUG0x040#defineF_S0_D0NTR0UTE0x0804defineF_VERB0SE0x100*多播选项*/intmopt
6、ions;4defineMU1TICAST_N0100P0x001#defineMU1TICST.TT10x002defineMu1T1CAST_IF0x004嵌入式1inUX应用程序开发详解一第10章、嵌入式1inUX网络编程接下来的第2部分是建立SOCket并处理选项:Intmain(intargc,char*argv)(structtimeva1timeout;structhostent*hp;structsockaddr_in*to;structprotoent*proto;structin_addrifaddr;inti;intch,fdmask,ho1d,pack1en,pre1o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ping 源码 程序 分析
