ICMP是Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
ping是DOS命令,通常用于检测网络连接和故障。Ping是Internet包资源管理器,用于测试网络连接量的程序。Ping向目的地发送ICMP回声清除消息,并报告是否接收到所需的ICMP回声响应。
需要建立socket,参数是AF_INET,SOCK_RAW,IPPROTO_ICMP
自己构造ICMP数据包, sendto发送给某地址。
ICMP有多种,你可以发送type为13的时间戳请求。
然后调用recvfrom会收到type为14的timestamp reply的IP包,
IP头一般是20 Bytes,里面包含src IP,des IP还有TTL等。
IP包的数据就是返回ICMP timestamp reply报文,里面有origTimestamp,recvTimestamp,transStamp,可以计算出时间。
可以参考网页链接网页链接
觉得有帮助可以注册帐号,给他点个“星”
Linux ping命令用于检测主机。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
语法:
ping
[-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
参数:
-d 使用Socket的SO_DEBUG功能。
-c<完成次数>设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数>指定收发信息的间隔时间。
-l<网络界面>使用指定的网络接口送出数据包。
-l<前置载入>设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式>设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小>设置数据包的大小。
-t<存活数值>设置存活数值TTL的大小。
-v 详细显示指令的执行过程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)