我正在创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实现以任何方式处理(除了被复制到回显应答一个响应设备)。
回应请求的数据部分是可选的。 你只需要包括它,如果你想
关于这个话题的一个很好的参考是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 80
或tcptraceroute
。