网络探测工具(二)——traceroute

tracert是一款用于探测报文从源到目的所经过路由的工具,通过改变IP报文的TTL值,利用ICMP超时响应揭示路径。本文详细介绍了其工作原理,包括使用UDP和ICMP报文的探测方法,并探讨了使用TCP报文的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

搭建网络环境的时候,经常有想要知道报文从源到目的所经历的所有路由节点这样的需要。此时,traceroute小程序,后续简称为tracert,就有用武之地了。

功能

tracert,最初由大神Van Jacobson设计并实现(膜拜),可以用来探测出报文在网络中从源到目的所经过的所有三层路由节点。

原理

既然tracert用来探测路径,那么问题来了:它如何确定路径?

1. 确定路径

我们知道IP报文头有一个ttl字段,用来确定IP报文的存活时间。每经过一次转发,ttl数值减一,当ttl为0时,如果报文还没有到达目的,那么协议栈就会向源端回应一个ICMP ttl超时报文。知道了这个东东后,确定路径是否就有眉目了呢?
(1)向目的发送ttl=1的UDP报文,第一个路由节点收到报文后发现ttl=0,向源端回应一个ICMP ttl超时报文,源知道了第一个路由节点。
(2)向目的发送ttl=2的UDP报文,第一个路由节点收到报文后ttl=1,继续转发给第二个路由节点,第二个路由节点收到报文后ttl=0,向源端回应一个ICMP ttl超时报文,源又知道了第二个路由节点。
(3)向目的发送ttl=3的UDP报文……

2. 确定目的

通过上面步骤可以一直发送UDP报文直到报文到达目的,那么问题来了:
(1)挖掘机技术哪家强?
(2)源如何知道报文到达了目的并停止发报文?
关于问题(1),我想大家都知道那是布鲁西特大学(blue shit)最强。
接下来重点介绍问题(2)。
我们又知道,UDP报文头有一个字段叫目的端口,用来告诉目的端这个报文要请求的是哪个服务。当目的端服务(端口)不存在时,协议栈会向源发送一个ICMP端口不可达报文,告诉源,这儿没这服务,别来烦我。源又知道了目的是不是,呵呵。

好,到此为止,问题完美解决。

有无其他方案

单纯从IP报文的角度来说,四层协议常用有三中:ICMP(经常被认为是三层协议,why,不告诉你),UDP,TCP。
前面我们介绍从源发送的是UDP报文,那么能否用ICMP或者TCP报文替换?答案必须是肯定的,否则哪里来的乐趣?

1.发送ICMP报文

确定路径的原理和前面一致,利用ttl超时。那么如何确认到达了目的?
想想ping程序的实现:发送ICMP echo报文,回应ICMP echo reply。
非常好,源持续向目的发送ttl递增的ICMP echo报文:收到ICMP ttl超时报文时认为是路径上路由节点,收到ICMP echo replay时认为到达了目的。

2.发送TCP报文

首先要明确的原理肯定和前面一致;其次要明确的是肯定不能直接发送TCP报文,why?
TCP是面向连接的协议,发送TCP报文首先要和目的建立连接,tracert哪里知道目的端有啥服务。就算知道某个目的端有某个服务,但是换个目的端怎么办?有没有通用点方案?

办法都是憋出来的,硬憋肯定能憋出来。
先来想想为啥不能发TCP报文,因为发报文前要先建立连接。
那连接咋建立的?三次握手。啥叫三次握手,简单来说跟建基友的过程是一样的:

Created with Raphaël 2.1.0
“天眼”软件使用说明: 本软件功能: 1、查找指定扫描范围主机上开放服务的所有端口。 2、检测同一网段上所有电脑的数据流。对于IP数据,解析出具体的数据流信息内容。如在“系统配置”中选择  “保存监测内容”,则在mytool.exe同目录下产生log.txt,保存监测的数据流内容。 3、检测指定IP地址的电脑的数据流。对于IP数据,解析出具体的数据流信息内容。如在“系统配置”中选择  “保存监测内容”,则在mytool.exe同目录下产生log.txt,保存监测的数据流内容。 4、Ping指定扫描范围所有主机,检测主机是否已开机。 5、显示本机的IP、以及本机在注册表中的主机名。 6、检测同一网段上数据流中包含的影音文件地址。包括swf,rm,ram,asf,mov,mpg,mpeg,mp4,flv,wmv,avi十一种 主流视频格式。如在“系统配置”中选择 “保存影音内容”,则在mytool.exe同目录下产生yinglog.txt,保存检测到的影音文件地址链接。 7、检测同一网段上数据流中包含的QQ号码,以及QQ行为。点击右键可拷贝密钥值及密文。 如有问题请与作者联系:cs200110614@sina.com,QQ:576256654 官方网站:http://www.kukustat.com 使用方法: 1、新建任一个目录 2、将mytool.rar解压到在新建的目录下。 3、运行winpcap_3_0.exe进行安装。 4、安装完winpcap_3_0.exe后,运行mytool.exe即可。 注:如果程序运行提示缺少文件,将mytool.rar解压出来的include、lib两个目录中的对应的文件拷贝到 mytool.exe所在目录下。
<think>我们正在讨论traceroute的原理和使用方法。根据引用内容,我们可以总结如下: ###原理部分1.**基本概念**:traceroute(Linux)或tracert(Windows)用于探测数据包从源主机到目标主机所经过的路径(引用[1])。2.**工作原理**(引用[4]):-发送TTL(Timeto Live)值从1开始递增的数据包(通常是ICMP或UDP包)。-当数据包到达一个路由器时,TTL减1。若TTL变为0,该路由器会丢弃数据包并向源主机发送一个“ICMP超时”消息。-源主机通过接收到的“ICMP超时”消息获取该路由器的IP地址和响应时间。-重复上述过程,每次TTL加1,直到数据包到达目标主机(目标主机返回ICMP端口不可达或ICMP回显应答)或达到最大跳数(默认30跳)。3.**关键点**:-某些路由器可能不返回ICMP超时消息(直接丢弃TTL过期的包),此时traceroute会显示为超时(如`* **`)。-目标主机收到TTL尚未减到0但端口不可达的数据包(UDP探测)时,会返回“ICMP端口不可达”消息,表示到达终点(引用[4])。 ###使用方法(Linux为例) 1. **基本命令**:```bashtraceroute目标主机(域名或IP)```例如追踪到百度的路径(引用[2]):```bashtraceroutewww.baidu.com``` 2. **常用选项**:-`-n`:不解析主机名,直接显示IP地址(加速显示)。-`-I`:使用ICMPEcho请求(默认是UDP数据包)。- `-T`:使用TCPSYN(默认端口80)。-`-m`:设置最大跳数(默认30)。- `-q`:设置每跳探测次数(默认3次)。-`-w`:设置等待响应时间(秒)。 3. **示例**:-使用ICMP探测,最大跳数20,每跳探测2次:```bashtraceroute -I -m20 -q2 www.baidu.com```4.**注意**:如果出现`connect:Networkis unreachable`(引用[3]),可能是网络不可达(如没有默认路由)。###输出解读输出示例(引用[2]):``` tracerouteto www.baidu.com (183.232.231.172),30hops max1192.168.1.1 (192.168.1.1)1.234ms1.456 ms1.678ms210.0.0.1(10.0.0.1)5.432ms5.678 ms6.123ms3* **4202.96.128.68(202.96.128.68)10.111ms10.222 ms10.333ms... ```-每行代表一跳(一个路由器)。-格式:跳数路由器IP(若解析出主机名则显示)每次探测的延迟(单位ms)。 -`*`表示该次探测未收到响应(超时或丢弃)。 ###进阶:与渗透测试结合在渗透测试中,traceroute可用于: -识别网络拓扑结构(引用[5])。 -结合Nmap扫描(如先探测路径,再对路径上的设备进行端口扫描)。###相关问题1.traceroute使用UDP、ICMP、TCP探测有何区别?哪种穿透性更强? 2.如何通过traceroute结果判断网络瓶颈?3.为什么某些跳显示为星号(`*`)?如何解决? 4.在防火墙严格的环境下,如何有效进行路径追踪? [^1]:通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。[^2]:【Linux】一步一步学Linux——traceroute命令(167)。[^3]:traceroute基本教程。[^4]:路由信息探测实验。[^5]:【Kali渗透全方位实战】使用Nmap进行端口探测-发现脆弱站点。</think>### Traceroute 探测原理及使用教程 #### 一、Traceroute 工作原理 Traceroute 的核心原理是利用 IP 数据包的 **TTL(Time-To-Live)** 字段和路由器的 **ICMP 超时响应**机制[^4]: 1. **TTL 递减机制** - 每个 IP 数据包携带 TTL 值(初始值通常为 1) - 每经过一个路由器,TTL 值减 1 - 当 TTL=0 时,路由器丢弃数据包并返回 **ICMP Time Exceeded** 消息 2. **探测流程** $$ \begin{aligned} &\text{1. 发送 TTL=1 的探测包} \rightarrow \text{第一跳路由器返回 ICMP 超时} \\ &\text{2. 发送 TTL=2 的探测包} \rightarrow \text{第跳路由器返回 ICMP 超时} \\ &\vdots \\ &\text{N. 发送 TTL=N 的探测包} \rightarrow \text{目标主机返回 ICMP Echo Reply} \end{aligned} $$ 3. **路径构建** 通过分析返回的 ICMP 消息中的 **源 IP 地址**,逐步构建完整路径: - 默认每跳发送 3 个探测包(计算平均延迟) - 最大跳数通常为 30(可通过参数调整) > ⚠️ 注意:某些路由器会静默丢弃 TTL 过期的包(不返回 ICMP),导致路径显示为 `* * *`[^4] #### 、Linux 系统使用教程 ```bash # 基本语法 traceroute [选项] 目标主机(域名/IP) # 常用选项 -n # 不解析主机名(直接显示IP) -I # 使用ICMP协议(默认UDP) -T # 使用TCP协议(端口80) -m 15 # 设置最大跳数(默认30) -q 5 # 每跳探测次数(默认3) -w 2 # 等待响应时间(秒) ``` ##### 示例操作 1. **追踪到百度的路径**(显示 IP 不解析域名)[^2]: ```bash traceroute -n www.baidu.com ``` ```output traceroute to 183.232.231.172 (183.232.231.172), 30 hops max 1 192.168.1.1 1.24 ms 2 10.10.0.1 5.67 ms 3 202.96.128.68 10.23 ms ... ``` 2. **解决网络不可达问题**(使用不同协议)[^3]: ```bash traceroute -I www.baidu.com # 改用ICMP协议 traceroute -T www.baidu.com # 改用TCP协议(穿透防火墙) ``` #### 三、Windows 系统使用 ```cmd tracert www.baidu.com ``` 输出格式类似: ```output 1 1 ms <1 ms <1 ms 192.168.1.1 2 5 ms 4 ms 5 ms 10.10.0.1 3 * * * 请求超时 4 12 ms 11 ms 13 ms 202.96.128.68 ``` #### 四、技术细节对比 | 探测协议 | 默认端口 | 穿透性 | 适用场景 | |----------|----------|--------|-------------------| | **UDP** | 33434+ | 弱 | Linux 默认 | | **ICMP** | - | 中 | 防火墙较宽松环境 | | **TCP** | 80/443 | 强 | 严格防火墙环境[^5]| #### 五、典型问题分析 1. **星号(`*`)路径节点** - 路由器禁用 ICMP 响应 - 防火墙拦截探测包 - 解决方案:尝试 `-T` (TCP) 或 `-I` (ICMP) 选项 2. **网络不可达错误** ```output connect: Network is unreachable ``` - 检查本地路由表 `route -n` - 验证 DNS 解析是否正常 `nslookup 目标域名` 3. **高延迟节点定位** 观察连续跳数的延迟突变: ```output 8 203.0.113.45 15 ms 9 198.51.100.22 150 ms # 此处开始延迟激增 10 203.0.113.60 152 ms ``` #### 六、安全应用场景 1. **渗透测试路径探测** ```bash traceroute -T -p 443 target.com # 使用HTTPS端口穿透防火墙 ``` 2. **结合Nmap扫描** 先获取路径节点 IP,再针对性扫描[^5]: ```bash traceroute -n target.com | awk '{print $2}' > ips.txt nmap -iL ips.txt -sV ``` --- ### 相关问题 1. Traceroute 显示的延迟时间具体代表什么含义?如何准确解读? 2. 在严格防火墙环境下,有哪些替代工具可以完成路径探测? 3. 如何通过 Traceroute 结果诊断跨国网络延迟问题? 4. Traceroute 与 MTR(My TraceRoute工具相比有哪些优缺点? [^1]: 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径 [^2]: 【Linux】一步一步学Linux——traceroute命令(167) [^3]: traceroute 基本教程 [^4]: 路由信息探测实验 [^5]: 【Kali渗透全方位实战】使用Nmap进行端口探测-发现脆弱站点
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值