为什么linux下的traceroute默认选项不能工作呢?
2011-02-23 09:46
357 查看
问题:
在命令行下输入:
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默认搜索选项修改方法)
- Linux 桌面为什么不能普及,Linux为什么照常发展?
- 安装Linux后修改grub默认启动选项
- linux下设置默认启动选项
- 不能掌握Linux的人为什么总被说智商低?
- 为什么Linux和Windows的可执行文件不能通用?
- 为什么不能使用成员变量的值作为成员函数的默认参数?
- linux中硬链接为什么不能跨分区
- 互联网人:为什么你工作3年依旧不能月薪过万
- linux:dpkg:依赖关系问题使得 skype 的配置工作不能继续:问题解决方法
- 为什么在我的Linux核心控制台上,Alt Gr键不能被用作Meta键?
- 精通 Grails 的大侠们 domain 用jointable 设置外键 为什么一直是默认的ID 不能自定义吗?
- spinlock与linux内核调度的关系,那么为什么信号量保护的代码可以睡眠而自旋锁就不能呢?
- 为什么要将工作环境,转移到linux下?
- 多角度分析为什么 Linux 的硬连接不能指向目录<转>
- linux 系统下,tomcat设置默认为80端口不能访问
- Python陷阱:为什么不能用可变对象作为函数的默认参数值
- ping和traceroute原理分析---异同----为什么不能ping通却能traceroute (转载)