那咱就先来说说基础知识吧
(一)ping的功能
ping命令可以检测指定设备的在线状态,是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 在电脑上可以直接查看,但是在程序中通常不会直接执行ping命令,而是通过socket编程方式向目标ip地址发送ICMP请求包,然后等待返回结果。
(二)ICMP
它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。从技术角度来说,ICMP就是一个**“错误侦测与回报机制”**,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性。当路由器在处理一个数据包的过程中发生了意外,可以通过ICMP向数据包的源端报告有关事件。记住他只是检测错误的并不修改错误,修正错误由任务方来完成
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文,IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。
ICMP消息类型包括以下几种:
(三)直接实例(抓包)
我的电脑ping做自己的网关(注意:不要Ping自己,不然抓不到包的)
图蓝的是ip数据报,共20个字节,最后四个字节是目的地址(即对方的地址),再网前数四个字节是自己的ip地址,45是版本号
重点来了,来了,他来了!!!他带着ICMP走来了!这就是ICMP
郑重解释一下:这就是上面说的ICMP的ip头部了(只对我自己抓包进行的解释)
| 数字 | 解释 |
|---|---|
| 08 | 回显请求(Ping请求) (类型) |
| 00 | 回显应答(Ping应答)(代码) |
| 4d2a | 校验和 |
| 0001 | 标识符 (一次抓包不变) |
| 0031 | ***(一次抓包逐次增加) |
说了这么多是不是心动了呢?我们的目的就是编程将ip数据报头依次显示出来。那应该怎么组帧呢???别急别急,我们下次分享!!
peace!!!
说明:本人是一名大学生,对问题的理解深度可能有欠缺,如果有什么不对的或者欠缺的提出来之后一定会多加改正,再次感谢看我文章的人,谢谢