原文链接:https://www.cnblogs.com/peida/archive/2013/03/07/2947326.html
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在MS Windows中为tracert。 traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
在大多数情况下,我们会在linux主机系统下,直接执行命令行:
traceroute hostname
而在Windows系统下是执行tracert的命令:
tracert hostname
1.命令格式:
traceroute[参数][主机]
2.命令功能:
traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
具体参数格式:traceroute [-dFlnrvx][-f <存活数值> ][-g <网关> ...][-i <网络界面> ][-m <存活数值> ][-p <通信端口> ][-s <来源地址> ][-t <服务类型> ][-w <超时秒数> ][主机名称或IP地址][数据包大小] 超时秒数> 服务类型> 来源地址> 通信端口> 存活数值> 网络界面> 网关> 存活数值>
3.命令参数:
-d 使用Socket层级的排错功能。
-f 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g 设置来源路由网关,最多可设置8个。
-i 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。
-m 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-s 设置本地主机送出数据包的IP地址。
-t 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。
4.使用实例:
实例1:traceroute 用法简单、最常用的用法
命令:
traceroute www.baidu.com
输出:
说明:
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.58.com ,表示向每个网关发送4个数据包。
有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n 参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
实例2:跳数设置
命令:
traceroute -m 10 www.baidu.com
输出:
说明:
实例3:显示IP地址,不查主机名
命令:
traceroute -n www.baidu.com
输出:
说明:
实例4:探测包使用的基本UDP端口设置6888
命令:
traceroute -p 6888 www.baidu.com
输出:
说明:
实例5:把探测包的个数设置为值4
命令:
traceroute -q 4 www.baidu.com
输出:
说明:
实例6:绕过正常的路由表,直接发送到网络相连的主机
命令:
traceroute -r www.baidu.com
输出:
说明:
实例7:把对外发探测包的等待响应时间设置为3秒
命令:
traceroute -w 3 www.baidu.com
输出:
说明:
Traceroute的工作原理:
Traceroute最简单的基本用法是:traceroute hostname
Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。
Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。
windows之tracert:
格式:
tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name
参数说明:
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
该诊断实用程序通过向目的地发送具有不同生存时间 (TL) 的 Internet 控制信息协议 (CMP) 回应报文,以确定至目的地的路由。路径上的每个路由器都要在转发该 ICMP 回应报文之前将其 TTL 值至少减 1,因此 TTL 是有效的跳转计数。当报文的 TTL 值减少到 0 时,路由器向源系统发回 ICMP 超时信息。通过发送 TTL 为 1 的第一个回应报文并且在随后的发送中每次将 TTL 值加 1,直到目标响应或达到最大 TTL 值,Tracert 可以确定路由。通过检查中间路由器发发回的 ICMP 超时 (ime Exceeded) 信息,可以确定路由器。注意,有些路由器“安静”地丢弃生存时间 (TLS) 过期的报文并且对 tracert 无效。
参数:
-d 指定不对计算机名解析地址。
-h maximum_hops 指定查找目标的跳转的最大数目。
-jcomputer-list 指定在 computer-list 中松散源路由。
-w timeout 等待由 timeout 对每个应答指定的毫秒数。
target_name 目标计算机的名称。
实例:
Traceroute是Linux和Mac OS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序。二者的功能相同,都能探测数据包从源地址到目的地址经过的路由器的IP地址。Traceroute/Tracert的实现都借助了TTL:通过向目的地址发送一系列的探测包,设置探测包的TTL初始值分别为1,2,3…,根据返回的超时通知(ICMP Time Exceeded Message)得到源地址与目的地址之间的每一跳路由信息。虽然两者输出结果一致,但在实现原理上还有着显著的差别。

1. 从源地址发出一个UDP探测包到目的地址,并将TTL设置为1;
2. 到达路由器时,将TTL减1;
3. 当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;
4. 当源地址收到该ICMP包时,显示这一跳路由信息;
5. 重复1~5,并每次设置TTL加1;
6. 直至目标地址收到探测数据包,并返回端口不可达通知(ICMP Port Unreachable);
7. 当源地址收到ICMP Port Unreachable包时停止traceroute。
注:
1. Linux和Mac OS等系统使用UDP包进行探测,目标端口号默认为33434,每次探测目标端口号加1。Traceroute故意使用了一个大于 30000 的目标端口号,以保证目标地址收到数据包后能够返回一个“端口不可达”的 ICMP 报文,于是源地址就可将端口不可达报文当作跟踪结束的标志。
2.Traceroute每跳默认发送3个探测包(发包的数量可通过-q进行设置),探测包的返回会受到网络情况的影响。如果防火墙封掉了ICMP的返回信息,那么相应的延时位置会以*显示。如果某台网关阻塞或者某台DNS出现问题,那么相应行的延时会变长。可以加-n 参数来避免DNS解析,以IP格式输出数据。
3.每个探测包都有唯一的标识号,使得Traceroute能够识别返回的包。UDP数据包使用递增的目标端口号进行标识。

1. 从源地址发出一个ICMP请求回显(ICMP Echo Request)数据包到目的地址,并将TTL设置为1;
2. 到达路由器时,将TTL减1;
3. 当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;
4. 当源地址收到该ICMP包时,显示这一跳路由信息;
5. 重复1~5,并每次设置TTL加1;
6. 直至目标地址收到探测数据包,并返回ICMP回应答复(ICMPEcho Reply);
7. 当源地址收到ICMP Echo Reply包时停止tracert。
注:
1.Windows系统使用ICMP请求回显(ICMP Echo Request)数据包进行探测,源地址以目的地址返回的ICMP回应答复(ICMP Echo Reply)作为跟踪结束标志。
2.Traceroute每跳默认发送3个探测包。在未能到达路由器或未返回ICMP超时通知的情况下,相应的延时位置会以*显示。
3.每个探测包都有唯一的标识号,ICMP数据包使用seq进行标识。
本次实验通过追踪本机到达www.baidu.com所经过的路由信息,并使用Wireshark抓取数据包进行简要分析来验证traceroute和tracert的实现原理。
(1)Mac OS
traceroute www.baidu.com。

如图,Traceroute能够显示到达目的地址所需的跳数、经过的路由器的IP地址、延时、丢包情况等信息。第一跳为10.203.4.225,第二跳为10.2.30.1,第三跳为10.2.1.1;每条记录输出3个延时结果,说明源地址每次默认发送三个数据包;在11条记录只有1个延时结果,说明源地址只收到了1个ICMP超时通知消息。

如图,源地址10.203.4.244向目的地址119.75.218.70发送UDP数据包,每跳默认发送3个,TTL设置为1;数据包遇到路由器之后,被丢弃,返回Time tolive exceeded超时通知,解析出路由器IP地址10.203.4.225。源地址再发数据包,设置TTL=2,从而解析出第二跳路由10.2.30.1。同理,解析出第三跳路由10.2.1.1。与终端显示的信息相符。
从图中还可以看出,数据包目标端口号从33435开始并且每次加1,traceroute能够通过UDP数据包递增的目标端口号来唯一识别返回的包。

如图,第11跳的61.51.113.202路由只返回了一个ICMP超时通知,与终端显示的信息相符。

如图,TTL=34时,ICMP数据包中Type=3(Destination unreachable),Code=3(Port unreachable),说明目的地址向源地址发送了端口不可达通知(ICMP Port Unreachable),表示数据包到达目的地址。
(2)Linux
traceroute www.baidu.com。



Linux系统下的抓包解析与Mac OS类似。
tracert www.baidu.com。

如图,第一跳为10.8.160.1,第二跳为10.0.14.1,第三跳为10.0.4.41;每条记录输出3个延时结果,说明源地址每次默认发送三个数据包;在第6条记录只有2个延时结果,说明源地址只收到了2个ICMP超时通知消息;数据包从源地址经过15跳之后到达目的地址。

如图,源地址10.8.169.32向目的地址220.181.111.188发送ICMP请求回显(ICMP Echo Request)数据包,每跳默认发送3个,TTL设置为1;数据包遇到路由器之后,被丢弃,返回Time tolive exceeded超时通知,解析出路由器IP地址10.8.160.1。源地址再发数据包,设置TTL=2,从而解析出第二跳路由10.0.14.1和10.0.14.5。同理,解析出第三跳路由10.0.4.41。与终端显示的信息相符。
从图中还可以看出,数据包从seq=142开始每次加1,tracert能够通过seq来唯一识别返回的包。

如图,seq=157的数据包没有得到路由器172.16.7.1的超时通知消息,因此第6跳只有两个延时结果,与终端显示的信息相符。

如图,TTL=15时,源地址收到了目的地址的ICMP回应答复(ICMP Echo Reply),说明源地址经过了15跳到达目的地址,与终端显示信息相符。
2015年3月26日开始,因某些众所周知的原因,GitHub遭到其网站历史上最大规模DDoS攻击。瑞典网络安全公司Netresec通过查看数据包中的TTL值断定这是一起中间人攻击事件。在此过程中,他们借助了路由追踪程序traceroute/tracert的实现原理。首先建立一个正常的连接,确保数据包能够到达目标机器。然后依次发送TTL值为1,2,3…的HTTP请求。若数据包没有到达中间人设备,则不会出现HTTP响应;若数据包到达中间人设备,则会出现HTTP响应,然后只需在出现HTTP响应时,查看请求数据包设置初始TTL值即可。
安全人员根据下图发现中间人设备潜伏在11和12跳之间。Web请求中 TTL 值为11的时候数据包没有响应,而TTL值为12的时候,返回了正常响应。


Traceroute/tracert路由追踪程序是用来追踪数据包到达网络主机所经过的路由信息的重要工具,虽然路由追踪效果一致,但实现原理略有不同:前者借助UDP协议,后者借助ICMP协议。此外,利用TTL追踪攻击主机的位置,也为我们提供了新的思路。
[1] http://www.cnblogs.com/peida/archive/2013/03/07/2947326.html
[2] http://www.dearda.com/index.php/archives/1361
[3] https://translate.google.com/translatehl=zh-CN&sl=en&u=https://technet.microsoft.com/en-us/library/cc.aspx&prev=search
[4] http://www.freebuf.com/news/topnews/63148.html
[5]https://blog.gesha.net/archives/499/
*本文原创作者:ArkTeam/YSYY,转载须注明来自FreeBuf.COM
Traceroute使用详解
原文链接:http://blog.51cto.com/xfelix/
到此这篇traceroute命令怎么用(traceroute命令作用和原理)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/51662.html