Traceroute/tracert原理和实践

article/2025/10/14 5:14:34

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

一、路由追踪程序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

1Mac 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


http://chatgpt.dhexx.cn/article/OA3HdIGY.shtml

相关文章

关于tcpTrace使用

关于tcpTrace 一款系统请求、响应的监听工具, 体积小, 工具界面简洁, 使用简单. 官网链接 https://www.pocketsoap.com/tcptrace/ 使用方式 1. 下载好工具后打开出现如下界面 Listen on Port # : 需要监听的端口, 可以随意, 但是端口必须是未被占用的状态. Destination …

tcp/ip ---------- traceroute

Ping通过发送ICMP回显请求和应答报文来完成,traceroute通过发送UDP报文的TTL和判断对方回复的ICMP报文来完成 Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由,还可以使用IP路由选项 在Ping程序中,我们描述了IP记…

TraceRoute实现

网络课上老师布置了第二个作业,写一个TraceRoute的程序。 Traceroute的工作原理: Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1…

tcp client

Mina 自定义硬件通讯协议框架搭建(TCP Client) 2018.03.04 18:49:29字数 1057阅读 2323 Apache MINA 是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。 使用背景 大三读完,出去…

traceroute的工作原理

MyySophia5个月前 traceroute的工作原理 是利用ICMP差错控制报文中的TTL超时会回向源点发送一个时间超时报文。例如A 主机 traceroute B主机,A会封装一些分组,这些分组很特殊,例如第一个分组的TTL设置为1 ,第二个分组的TTL设置为…

TCPTRACE的使用说明

主要的配置项介绍 Listen on Port :本机监听的端口,后面请求服务时使用; Destination Server :目标服务器的地址 Destination Port :目标端口 完成后,在地址栏中输入 http://127.0.0.1:8080(或 http://loca…

tcptrace

http://download.csdn.net/tag/tcptrace TcpTrace 0.8.1.717 http://www.soft82.com/download/windows/tcptrace/ 用tcpTrace查看SOAP请求/应答消息 使用说明 12. 五月 2009 23:17 by 螵蛸in Server技术 // Tags: tcpTrace, SOAP // 评论 (0) 对于开发Web服务应用…

tracert/traceroute原理

一、路由追踪程序traceroute/tracert Traceroute是Linux和Mac OS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序。二者的功能相同,都能探测数据包从源地址到目的地址经过的路由器的IP地址。Traceroute/Tracert的实现都借…

tcpTrace的使用

tcpTrace是一款小巧的获取请求报文和响应报文的工具,使用非常简单。 比如我现在有一个服务地址是http://localhost:8080/springmvc/handle.do,那么我们在tcpTrace中的配置如下: listen on port:8081(这个端口号可以自己设定&…

Tracetcp/Tcptrace的使用

Tracetcp是一个类似于Tracert的工具,可以直接在命令后加端口进行指定端口测试。 使用Tracetcp要求 1. 安装winpcap , 下载链接:https://www.winpcap.org/install/ 2.下载tracetcp软件,下载链接: https://github.com…

traceroute详解

traceroute详解 1.traceroute基本概念 traceroute (Windows系统下是tracert) 命令利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器。TTL值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP呼叫报文的TTL值和观察该报文被抛弃的返回信息&#x…

如何使用TCP Traceroute

与发送UDP或ICMP ECHO数据包的传统跟踪路由不同,TCP跟踪路由使用TCP数据包,因此可以绕过最常见的防火墙过滤器。 请遵循以下说明以运行TCP Traceroute: 对于Windows用户对于Mac用户对于Linux用户 对于Windows用户, Windows没有…

TCP/IP 网络:Traceroute程序

Traceroute是一个用来探索TCP/IP协议的工具,他通过ICMP协议可以让我们看到IP数据报从一台主机传送到另一台主机所经过的所有路由。 使用方法: traceroute [参数] [主机名] windows下命令为 tracert [] [] [-n]:显示的地址是用数字表示而不是符号[-v]…

hdfs创建文件报错 mkdir: Cannot create directory /Flink. Name node is in safe mode.

据资料是说hdfs刚刚启动,还在验证和适配,所以进入安全模式,等一会儿就好了,然后我等了几分钟并没有好 然后找到了解决安全模式的办法: 用户可以通过dfsadmin -safemode value 来操作安全模式,参数value…

network_tcp三次握手

TCP是TCP/IP的传输层控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 首先需要了解几个名词:tcp标志位,有6种分别为:SYN(synchronous建立联机) 、ACK(acknowledgement 确认) 、PSH(push传送) 、FIN(finish结束)、 RS…

mysql1396错误

波尔,被控制的电脑通讯端口是多少? 1222nervSNIR&Dnetwork 1239nmsdNMSD 1243Sub-7木马 1245Vodoo 1248hermes 1269MavericksMatrix 1492FTP99CMP(BackOriffice.FTP) 1509StreamingServer 1524ingreslock后门 1313bmc_patroldb 1314pdps 1321pipPIP …

NetFlow

 NetFlow是一种数据交换方式。Netflow提供网络流量的会话级视图,记录下每个TCP/IP事务的信息。也许它不能象tcpdump那样提供网络流量的完整记录,但是当汇集起来时,它更加易于管理和易读。Netflow由Cisco创造。 工作原…

failed to create network error response from daemon filed to setup ip tables问题

问题 今天在环境上搭建平台,执行docker-compose up -d 报错 Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-b649822bbcff -j RETURN: iptables: No chai…

Devtools 热部署

文章目录 前言使用步骤 1.引入库2.配置总结 前言 在实际开发过程中,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本。对于一个后端开发者来说,重启过程确实很难受啊 一、使…

内网渗透的那些net命令|Net config|Net

Net命令 Net命令是一个命令行命令,Net命令有很多函数用于实用和核算计算机之间的NetBIOS连接,可以查看我们的管理网络环境,服务,用户,登陆等信息内容 Net使用方法 显示当前域的计算机列表net view 查看指定计算机的共享资源列表net view \test 查看共享的资源net share 查看…