当类型为11,即超过时间时,ICMP数据包有效载荷的大小是多少?由于它包含一个IP报头和产生ICMP消息的IP数据包有效负载的前8个字节,所以我认为它的大小是20 +8= 28。
我正在用TTL=1重放一些常见的用户流量。在我丢弃的ICMP消息中,我注意到:
由于我需要将ICMP超过时间的消息与通过比较这些字节触发它们的数据包相匹配,所以这段信息是必不可少的,但是我找不到为什么会发生这种情况。
发布于 2012-08-13 09:27:17
问题是您引用了来自RFC 792,第4页的8字节头有效载荷,但是RFC 1812改变了需求.
Time Exceeded Message (in RFC 792)
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 | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+RFC 1812,4.3.2.3节显着地增加了ICMP错误消息中允许的有效载荷(重点是地雷):
4.3.2.3原始消息头 历史上,每条ICMP错误消息都包括Internet头和触发错误的数据报的前8个数据字节。由于IP隧道和其他技术的使用,这已经不足够了.因此,ICMP数据报应该包含尽可能多的原始数据报,而ICMP数据报的长度不超过576字节。返回的IP报头(和用户数据)必须与接收的IP报头相同,但路由器不需要撤消通常在转发过程中执行的、在检测到错误之前执行的任何修改(例如,递减TTL或更新选项)。
从Scapy数据包生成的ICMP错误应该包含来自原始数据包的IP和TCP层的所有信息。
发布于 2012-08-13 08:44:33
正如您注意到的,ICMP有效负载是IP报头加上原始数据包的有效负载的8位字节。然而,IP报头并不总是20个八字节长,而20个只是最小长度。IP报头本身可能包含选项,报头长度由报头的国际人道主义法字段中的值表示。见RFC 791的第3.1段。因此,看起来TCP数据包在其IP报头中有12个额外的八进制选项。RFC 791定义了一些标准选项,如源路由和时间戳。您必须对标题进行解码,以确定所使用的选项。
发布于 2013-07-29 22:58:42
我想为将来的参考补充一点,ICMP的有效载荷不仅像Mike所说的那样大小不同,而且在用于MPLS的ICMP扩展的情况下,它们也可能比128个字节的长。有关更多信息,请参见这份草稿
https://stackoverflow.com/questions/11798250
复制相似问题