网络编程之ICMP-ping实现
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。也许大家对这个神马协议很陌生,咦?这是神马东东?但是如果说起DOS外部命令ping,相信接触过DOS的朋友就比较熟悉了,ping常用于测试两台电脑网络通不通,如
这个ping的过程其实就是ICMP工作过程。
好了,有源码有真相,我们边看实现边看说明:
首先,我们需要定义ICMP报文头
typedef struct _ICMPHeader
{
UCHAR icmp_type;
UCHAR icmp_code;
USHORT icmp_checksum;
//---------信息
USHORT icmp_id;
USHORT icmp_sequence;
ULONG icmp_timestamp;
}ICMPHeader,*PICMPHeader;
icmp_type 8位报文类型
icmp_code 8位报文代码
icmp_checksum 16位验证和 验证包数据是否丢失
回显信息,由上面类型和代码决定
icmp_id 16位报文ID标示,比如发出一个包,目标机响应一个包,这时我们可以通过对比ID查看是否是响应我们的包
icmp_sequence 16位序列号 我们按序列发出包 当然也按序列接包 这样也可以查看网络通畅程度
icmp_timestamp 16位时间戳 发包收包之间的时间差
下面是具体实现:
http://blog.