为什么linux下的traceroute默认选项不能工作呢?
2011-04-29 01:34
295 查看
问题:
在命令行下输入:
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抓包看看.
在命令行下输入:
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下的traceroute默认选项不能工作呢?
- 为什么linuxC程序设计中不能使用system("cd ..")来改变当前工作路径而用chdir()函数
- 为什么Windows8不能搜索文件内容(windows8默认搜索选项修改方法)
- Python陷阱:为什么不能用可变对象作为函数的默认参数值
- 为什么mysql默认为utf-8,但是CMD不能插入汉字
- 【转帖】为什么IT培训机构培养出来的软件工程师不能独立工作
- 为什么你工作3年依旧不能月薪过万
- (转)多角度分析为什么 Linux 的硬连接不能指向目录
- 互联网人:为什么你工作3年依旧不能月薪过万
- linux基础之虚拟机ubuntu为什么不能上网?
- 为什么硅谷不能在没有移民的情况下工作
- 为什么说c++不能重定义继承而来的默认参数
- linux中设置默认打开vim选项
- 安装Linux后修改grub默认启动选项
- linux 工作队列上睡眠的认识--不要在默认共享队列上睡眠
- Linux 下为什么默认三个分区
- 为什么有很深的windows基础还是不能动摇linux半步
- 多角度分析为什么 Linux 的硬连接不能指向目录
- linux中为什么已经是root用户仍不能执行程序
- 为什么Linux下不能运行Windows的程序