ICMP协议之ping实现
2017-06-24 13:40
579 查看
ICMP协议之ping实现
标签: socket网络c2010-03-29 20:36 20765人阅读 评论(3) 收藏 举报
![](http://static.blog.csdn.net/images/category_icon.jpg)
分类:
网络(4)
![](http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg)
版权声明:本文为博主原创文章,未经博主允许不得转载。
1. 相关ICMP协议概述
这里只讲解与ping有关的ICMP
4000
消息类型,主机发送回送消息(Type = 8),被请求主机回送响应消息(Type = 0),基本格式如下:
回送消息[ECHO]
![](http://hi.csdn.net/attachment/201003/29/3032124_1269866354pZ43.jpg)
回送响应消息[ECHO REPLY]
![](http://hi.csdn.net/attachment/201003/29/3032124_1269866354djJ4.jpg)
其中•Code = 0,
•CheckSum为校验和,重点注意从ICMP的头部(即Type开始),到data结束(即到整个数据包结束),具体计算见下面分析
•Identifier为标识符,由主机设定,一般设置为进程号,回送响应消息与回送消息中identifier保持一致
•Sequence Number为序列号,由主机设定,一般设为由0递增的序列,回送响应消息与回送消息中Sequence Number保持 一致
•data为数据,由主机设定,回送响应消息与回送消息中data保持一致
2. Ping流程
Ping实际上利用的就是ICMP ECHO和ICMP ECHO REPLY包来探测主机是否存在,所以Ping程序的流程十分简单:发送ICMP ECHO包---- > 接收ICMP ECHO REPLY包
发送ICMP ECHO包时填充Identifier为进程ID, Sequence Number为从0递增计数,data填充为发送时间
接收ICMP ECHO REPLY包时检查Identifier, Sequence Number是否正确,通过IP报头的源地址字段获得回送报文的主机地址是否正确
3. 模拟Ping实现pingy
Ping的基本流程已讲解完
由于要自己构造ICMP包,因此创建需要创建原始套接字(即需要自己填充报头):
sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)
SOCK_RAW用于直接访问网络层,应用程序负责构造自己的协议首部;IPPROTO_ICMP表示ICMP报头由程序构造
构造ICMP报头,注意各个字段的填充,特别是校验和(可以参照icmp的结构定义)
icmp->icmp_type
icmp->icmp_code
icmp->icmp_cksum
icmp->icmp_id
icmp->icmp_seq
icmp ->icmp_data;
而完成系统的Ping命令还需添加信息统计,如发送字节数,收到字节数,发送包,接收包,发送时间,TTL等;另外,添加信号处理,在用户使用Control^C等退出时打印即时信息
4. 具体代码见附件
http://download.csdn.net/source/2181075
5. 最终效果如下
![](http://hi.csdn.net/attachment/201003/29/3032124_1269866098NQ8C.jpg)
相关文章推荐
- ICMP协议规范:一种用于网络管理的协议。对照它您可以想一想PING命令实现的机理
- ICMP协议规范:一种用于网络管理的协议。对照它您可以想一想PING命令实现的机理
- ICMP协议之ping实现
- ICMP协议之ping实现
- ICMP协议规范:一种用于网络管理的协议。对照它您可以想一想PING命令实现的机理
- ICMP 协议及 Ping程序的实现
- ICMP协议之ping实现
- [转]ICMP协议之ping实现
- ICMP协议之ping实现
- ICMP协议之ping实现
- ICMP协议的分析与实现
- 利用Visual C#实现ICMP网络协议
- ICMP_ping命令的实现
- icmp的程序(ping的实现)
- ICMP 协议报头分析与ping相关的疑问
- debian下ping命令向目的主机发送ICMP报文的实现代码
- ICMP API实现ping
- ping 实现设计---ICMP
- 使用 ICMP 和 RAW Sockets实现 ping 类
- 利用Visual C#实现ICMP网络协议(转载)