原文  : http://www.freebuf.com/articles/network/118221.html

一、路由追踪程序traceroute/tracert

Traceroute是Linux和Mac OS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序。二者的功能相同,都能探测数据包从源地址到目的地址经过的路由器的IP地址。Traceroute/Tracert的实现都借助了TTL:通过向目的地址发送一系列的探测包,设置探测包的TTL初始值分别为1,2,3…,根据返回的超时通知(ICMP Time Exceeded Message)得到源地址与目的地址之间的每一跳路由信息。虽然两者输出结果一致,但在实现原理上还有着显著的差别。

二、Traceroute实现原理

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数据包使用递增的目标端口号进行标识。

三、Tracert实现原理

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进行标识。

四、Wireshark抓包解析

本次实验通过追踪本机到达www.baidu.com所经过的路由信息,并使用Wireshark抓取数据包进行简要分析来验证traceroute和tracert的实现原理。

1.Linux/ Mac OS——traceroute

(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类似。

2. Windows——tracert

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跳到达目的地址,与终端显示信息相符。

五、The Great Cannon案例

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/cc940128.aspx&prev=search

[4] http://www.freebuf.com/news/topnews/63148.html

[5]https://blog.gesha.net/archives/499/

*本文原创作者:ArkTeam/YSYY,转载须注明来自FreeBuf.COM

路由追踪traceroute分析相关推荐

  1. 路由追踪——traceroute与tracert

    一.路由追踪 (一)路由跟踪,就是获取从主机A到达目标主机B这个过程中所有需要经过的路由设备的转发接口IP. (二)ICMP协议 Internet控制报文协议(internet control mes ...

  2. 3.ICMP_抓包分析traceroute路由追踪

    一.路由追踪程序traceroute/tracert Traceroute是Linux和Mac OS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序.二者的功 ...

  3. 路由追踪程序traceroute/tracert分析与科普

    一.路由追踪程序traceroute/tracert Traceroute是Linux和Mac OS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序.二者的功 ...

  4. 路由追踪工具 traceroute 使用技巧

    路由追踪工具 traceroute 使用技巧 路由追踪工作原理 路由追踪实例 1. 如何运行 traceroute 2. 禁用 IP 地址和主机名映射 3. 配置回复等待时间 4. 配置每一跳的查询次 ...

  5. Traceroute(路由追踪)的原理及实现

    Traceroute(路由追踪)的原理及实现 (1)相应的协议和原理 IP协议:IP协议是TCP/IP协议族中最核心的部分,它的作用是在两台主机之间传输数据,所有上层协议的数据(HTTP.TCP.UD ...

  6. 华三路由追踪命令 tracert详解

    华三路由追踪命令 tracert 此命令用来查看IPv4报文从源端传到目的端所经过的路径 tracert [ -a source-ip | -f first-ttl | -m max-ttl | -p ...

  7. linux 查询ip归属地的工具,可视化路由追踪工具Linux版下载

    BestTrace是一款由IPIP.NET开发的IP路由追踪检测工具.目前已经涵盖了Windows.Android.iOS.Mac平台.BestTrace可对服务器所经过的路由进行可视化检测,并可以准 ...

  8. 什么是路由追踪,路由追踪有什么用?

    当您在访问互联网上的某个网站或服务器时,路由追踪可以帮助您跟踪网络数据包在整个网络中传输的路径和时间,这对于分析网络故障.优化网络性能.确保网络安全等方面非常有用. 路由追踪的工作原理是通过向目标地址 ...

  9. nexttrace: 一款开源的全能可视化网络路由追踪工具

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! ​ 今天要给大家推荐一个 GitHub 开源项目 sjlleo/nexttrace,该项目在 GitHub 有超过 ...

最新文章

  1. 工业机器人的下一个竞争焦点已经非常明确:通用人工智能(AGI)
  2. 十招轻松搞定社会媒体
  3. uibmodal模态框打开另一个模态框_进阶版神笔:只需一句话、一个故事,即可生成画面...
  4. 湖南工程学院+c语言程序设计人事档案管理系统,程序设计人事档案管理系统.doc...
  5. 8种最坑的SQL错误用法,你有没有踩过坑?
  6. MySQL Identifiers(标识符)
  7. Firebug方便分解网页的小工具
  8. django上课笔记6-MVC,MTV架构-中间件-初识Form组件
  9. Linux实验——缓冲区溢出漏洞实验
  10. 开源GIS(六)——openlayers中overlay强大功能
  11. 哨兵二号(Sentinel-2)卫星数据处理
  12. 关于bat安装与卸载服务脚本
  13. RANSAC算法拟合平面实现
  14. 第一章节:期货及衍生品概述
  15. (一)Python小甲鱼入门教程——第一个小游戏001-004
  16. 6个实用的 Python 自动化脚本,告别加班,你学会了吗?
  17. 六大维度全景呈现:《数据安全法》实施一周年行业洞察
  18. Java学习笔记之 Lambda表达式
  19. 【观察】首款7nm芯片服务器亮相,联想驱动数据中心再创新
  20. 反复调整,苹果的价格策略还奏效吗?

热门文章

  1. 径向基神经网络(rbfn)进行函数插值,代码实现
  2. 互联网家装,风口下飞不起来的“猪”
  3. 如何通过二极管设计一个与门电路
  4. 锂电池放空后充不进电_锂电池充不进去电怎么办(锂电池为什么小偷不要)
  5. python f{} 字符串用法详解(含冒号用法)
  6. Python蒙特卡罗法测圆周率
  7. 微信分享解决wx not defined
  8. JS常用运算符及其优先级
  9. 【python】 彩图RGB 灰度gray互相转化
  10. java的默认访问权限_java类的访问权限