为什么linux下的traceroute默认选项不能工作呢?

问题:
在命令行下输入:
traceroute www.google.com
屏幕打印是这样的:
traceroute to www.google.com (66.249.89.104), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
没有得到任何中间路由器的信息。

分析:
traceroute的基本原理就是发出TTL字段为1-n的ip包,然后等待路由器的ICMP超时回复,进而记录
下来经过的路由器。通过man traceroute 可以看到,traceroute可以在ip包中放三种数据:
1) 使用UDP包(默认选项是-U)
2)使用TCP包 选项是-T
3)使用ICMP包 选项是-I
而且每个包traceroute都发3次。
分别用-T,-I选项试试。
发现TCP包时候也不行,但是-I选项是有效果的:
 1  10.10.20.1 (10.10.20.1)  3.611 ms * *
 2  * * *
 3  10.10.10.1 (10.10.10.1)  3.590 ms * *
 4  * * *
 5  * * *
 6  * * 61.130.125.25 (61.130.125.25)  10.914 ms

但貌似不是全部的中间路由ip,有些包丢失了。
进一步查看traceroute的选项,有一个-z项,基本意思是设置探测包的发送间隔,默认是0,就是连续发送。设置这个的目的
是因为有些路由器设置了icmp rate limit. 继续研究为什么路由器要设置icmp的发送速率。
google之:原来是为了应付DOS攻击,进而限制端口发出的icmp的速率。

既然清楚了,那就尝试下:
sudo traceroute -I www.google.com -z 0.005 -q 1
traceroute to www.google.com (66.249.89.104), 30 hops max, 60 byte packets
 1  10.10.20.1 (10.10.20.1)  1.914 ms
 2  10.10.20.1 (10.10.20.1)  2.109 ms
 3  10.10.10.1 (10.10.10.1)  1.081 ms
 4  115.238.62.113 (115.238.62.113)  2.468 ms
 5  220.191.158.213 (220.191.158.213)  2.177 ms
 6  61.130.125.25 (61.130.125.25)  2.016 ms
 7  220.191.158.241 (220.191.158.241)  2.419 ms
 8  202.97.55.5 (202.97.55.5)  4.757 ms
 9  202.97.33.14 (202.97.33.14)  5.293 ms
10  202.97.33.2 (202.97.33.2)  5.161 ms
11  202.97.33.5 (202.97.33.5)  4.972 ms
12  202.97.5.138 (202.97.5.138)  41.524 ms
13  209.85.255.80 (209.85.255.80)  53.241 ms
14  209.85.249.195 (209.85.249.195)  68.928 ms
15  72.14.236.126 (72.14.236.126)  52.108 ms
16  66.249.89.104 (66.249.89.104)  48.105 ms

果真可以了。
如果想看具体traceroute发了什么包,路由器返回了什么包,可以用wireshark抓包看看.



你可能感兴趣的:(linux)