$ traceroute -q1 -m5 -n www.163.com
traceroute to www.163.com (218.213.235.236), 5 hops max, 60 byte packets
1 192.168.1.1 24.030 ms
2 192.168.137.1 23.946 ms
3 *
4 *
5 *
traceroute命令后三跳都显示为星号,但是wireshark抓包显示都返回了icmp type 11。
请教这种情况是什么原因,为什么没有显示10.18.107.1,10.16.0.1和10.16.0.10?
多谢!
traceroute 的原理是通过发送几个 TTL 不同的 UDP 包,然后期待收到 ICMP type 11 的回应,借此来探测中间节点 IP。
从 traceroute 2.0.21 源码来看,有几点可以确认:
*
;SOCK_DGRAM
创建 socket,并且启用了IP_RECVERR
;poll
来轮询,仅当POLLERR
事件发生的时候才尝试接受 ICMP;所以,traceroute 显示
*
但 ICMP 却又实际已收到,有几种可能性:poll
没能获得POLLERR
事件;从题主的几次抓包来看,不是 ICMP 超时,但无法确认后两点,可以考虑下载 traceroute 源码调试一下,加几个
printf
输出额外信息,看看究竟是哪个环节出问题。源码本身不是很复杂,只要在traceroute/mod-udp.c
里面加些调试信息就可以很清楚的定位问题了。由于我这里始终找不到一个能重现问题的 IP,所以无法定位根本原因,抱歉。