ICMP报文直接封装在数据链路帧中,而非封装在IP包中。它是IP层的一部分
(ICMP协议和IP协议处在同一层)
ICMP的详细定义可以看RFC 777 Internet Control Message Protocol。
按ICMP报文中定义的类型(type)字段分,可分为这几种
0 Echo Reply
3 Destination Unreachable
4 Source Quench
5 Redirect
8 Echo
11 Time Exceeded
12 Parameter Problem
13 Timestamp
14 Timestamp Reply
其报文格式:
以Destination Unreachable Message为例:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
不知你用的是哪一种。
问题是操作系统在接收到ICMP的报文后会自行处理掉,不知你拿什么办法接收,除非替换
掉sock.dll之类的东西。