ICMP消息的正确内容是什么? (缓冲区,不要碎片等)

我正在创build一个Tracert程序,并且想知道在Ping有效载荷中使用的值“buffer”是否真的很重要。 它可以是任何东西,或路由器根据缓冲区的内容作出不同的响应?

那么ICMP ping消息的其他部分呢? 不要片段等…

http://msdn.microsoft.com/en-us/library/ms144962.aspx

我发现一个样本设置缓冲区如下所示:

byte[] Buffer { get { if (_buffer == null) { _buffer = new byte[32]; for (int i = 0; i < Buffer.Length; i++) { _buffer[i] = 0x65; } } return _buffer; } } 

不,ICMP回显的数据部分是没有意义的。

它作为一种手段,使请求和回复数据包更大(可能超过分片点,path的MTU)来testingnetworking状况,但不是由ICMP实现以任何方式处理(除了被复制到回显应答一个响应设备)。

回应请求的数据部分是可选的。 你只需要包括它,如果你想

  • 使消息更大,以testing与碎片相关的问题
  • testing特定的位模式是否会导致您的networking设备出现问题(例如,它们可能会将长串“1”或“0”解释为进入testing模式的命令)

关于这个话题的一个很好的参考是Eric Hall的互联网核心协议 。

这取决于。 对于时间戳,redirect和无法访问的消息,有效载荷包含有价值的信息。 即使回送请求和应答有效载荷也可以包含诸如时间戳之类的信息 。

你说你正在编写一个traceroute程序,但是你使用了“Ping payload”一词,这表明你正在尝试处理ICMP回应请求和回复。 尽pipe使用ICMP消息来追踪路由当然是可能的(这是Windows上tracert的唯一select),但在许多情况下,您将无法追踪完整path,因为过度热衷的pipe理员往往会阻止回声。

您可能需要考虑使用其他协议来进行探测,特别是TCP。 例如,跟踪路由到Web服务器时, traceroute (使用UDP defualt)或tracert (ICMP)几乎不像nmap -Pn --traceroute -p 80tcptraceroute