用于追踪分析数据包在网络中传输时经过的路径,并输出到目标地址的延迟情况和节点信息。
windows下相关命令
Tracert
C:\Users\123>Tracert
用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]
[-R] [-S srcaddr] [-4] [-6] target_name选项:
-d 不将地址解析成主机名。(可以加快速度)
-h maximum_hops 搜索目标的最大跃点数。
-j host-list 与主机列表一起的松散源路由(仅适用于 IPv4)。
-w timeout 等待每个回复的超时时间(以毫秒为单位)。
-R 跟踪往返行程路径(仅适用于 IPv6)。
-S srcaddr 要使用的源地址(仅适用于 IPv6)。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
1:tracert命令用于确定 IP数据包访问目标所采取的路径,显示从本地到目标网站所在网络服务器的一系列网络节点的访问速度,最多支持显示30个网络节点。
2:最左侧的第一列,1,2,3,……,表明在我使用的宽带上,经过17(算自己本地的)个路由节点,可以到达百度的服务;
3:中间的三列,单位是ms,表示我们连接到每个路由节点的速度,返回速度和多次链接反馈的平均值;
4:后面的IP,就是每个路由节点对应的IP;
5:如果返回消息是超时,则表示这个路由节点和当前我们使用的宽带,是无法联通的,至于原因,就有很多种了,比如:特意在路由上做了过滤限制,或者确实是路由的问题等,需要具体问题具体分析;
6:如果在测试的时候,大量的都是 * 和请求超时,则就说明这个IP,在各个路由节点都有问题
如果需要了解每一跳的丢包率等信息,那就必须使用pathping命令了
pathping
C:\Users\123>pathping /?
用法: pathping [-g host-list] [-h maximum_hops] [-i address] [-n]
[-p period] [-q num_queries] [-w timeout]
[-4] [-6] target_name选项:
-g host-list 与主机列表一起的松散源路由。
-h maximum_hops 搜索目标的最大跃点数。
-i address 使用指定的源地址。
-n 不将地址解析成主机名。
-p period 两次 Ping 之间等待的时间(以毫秒为单位)。
-q num_queries 每个跃点的查询数。
-w timeout 每次回复等待的超时时间(以毫秒为单位)。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
linux 下相关命令
traceroute
命令选项
-4
: 使用 IPv4。-6
: 使用 IPv6。-d
: 启用套接字级别的调试。-F
: 设置不分片标志,即不分片数据包。-f first_ttl
: 从指定的 TTL(生存时间)开始跟踪(而不是从 1 开始)。-g gate,...
: 通过指定的网关路由数据包。-I
: 使用 ICMP ECHO 进行追踪。-T
: 使用 TCP SYN 进行追踪,默认端口为 80。-m max_ttl
: 设置最大跳数(TTL),即要达到的最大 TTL。默认为 30。-n
: 不将 IP 地址解析为其域名。-p port
: 设置目标端口。对于默认方法,“udp” 的初始 UDP 端口值(默认为 33434),或 “icmp” 的初始 seq(也会增加,默认从 1 开始),或其他方法的某个常量目标端口(默认为 “tcp” 的 80, “udp” 的 53 等)。-t tos
: 设置出站数据包的 TOS(IPv4 服务类型)或 TC(IPv6 传输类)值。-l flow_label
: 为 IPv6 数据包使用指定的 flow_label。-w MAX,HERE,NEAR
: 等待一个探测时间不超过响应时间的 HERE 倍(默认为 3 倍),或者不超过下一个跳点的 NEAR 倍(默认为 10 倍),或者不超过 MAX 秒(默认为 5.0 秒)。-q nqueries
: 每个跳点的探测数。默认为 3。-r
: 绕过常规路由,直接发送到附加网络上的主机。-z sendwait
: 探测之间的最小时间间隔。默认为 0。如果值大于 10,则指定的是毫秒数,否则是秒数。-e
: 显示 ICMP 扩展(如果存在),包括 MPLS。-A
: 在路由注册表中执行 AS 路径查找,并在相应的地址之后直接打印结果。-M name
: 使用指定的模块(内置或外部)进行 traceroute 操作。大多数方法都有其快捷方式(例如-I
表示-M icmp
)。-O OPTS,...
: 为 traceroute 模块使用特定的选项。--sport=num
: 使用指定的源端口号进行传出数据包。意味着-N 1
。--fwmark=num
: 为传出数据包设置防火墙标记。-U
: 使用 UDP 对特定端口进行 traceroute(而不是每次探测都增加端口),默认端口为 53。-UL
: 使用 UDPLITE 进行 traceroute(默认目标端口为 53)。-D
: 使用 DCCP 请求进行 traceroute(默认端口为 33434)。-P prot
: 使用指定协议的原始数据包进行 traceroute。--mtu
: 发现沿路径的 MTU(最大传输单元)。意味着-F -N 1
。--back
: 猜测反向路径中的跳数,并在不同的情况下打印它们是否不同。-V
: 打印版本信息并退出。--help
: 查看帮助文档。
1、指定出口 -s
traceroute -s 192.168.1.10 example.com
这将会从 IP 地址为 192.168.1.10 的主机发送 traceroute 请求到 example.com。这在某些网络环境中可能很有用,特别是当主机有多个网络接口或 IP 地址时。
2、用 ICMP ECHO 请求 -I
traceroute -I example.com
这将会向 example.com 发送 ICMP ECHO 请求,并等待每个跳点返回 ICMP ECHO 回复。通过这种方式,你可以了解到数据包从源主机到达目标主机的路径上经过的每个路由器。
- ICMP 追踪可能会受到网络中的防火墙和安全策略的影响。有些网络可能会阻止 ICMP 报文,因此在这样的网络环境中,ICMP 追踪可能无法正常工作。
- 默认 UDP 追踪可能受到网络中防火墙和安全策略的影响,但相对来说受到的影响较少。因为 UDP 数据包更常见,大多数网络都会允许 UDP 流量通过。
3、指定探测端口
traceroute -T -p 443 baidu.com
来指定使用 TCP SYN 进行 traceroute,同时连接到百度网站的 443 端口(HTTPS 默认端口)
traceroute -U baidu.com
-U
选项指示 traceroute
使用 UDP 数据包而不是默认的 ICMP 或 TCP 数据包。
UDP 追踪通常会发送到目标主机的默认 UDP 端口,例如 DNS(53)或其他应用程序端口。在这种情况下,traceroute
将尝试使用 UDP 数据包来进行跟踪,以了解数据包通过的路径和响应时间。
请注意,由于 UDP 的特性,数据包可能会被路由器或防火墙丢弃或过滤,因此 UDP 追踪可能不会像 ICMP 或 TCP 追踪那样成功。
4、指定协议
在 traceroute
中,-P
选项用于指定要使用的原始数据包的协议。这个选项允许你指定使用特定的协议进行追踪。
以下是 -P
选项的常见用法:
-
使用
-P icmp
追踪 ICMP 数据包:traceroute -P icmp example.com
这将使用 ICMP 数据包进行追踪。
-
使用
-P udp
追踪 UDP 数据包:traceroute -P udp example.com
这将使用 UDP 数据包进行追踪。在这种情况下,可以考虑结合
-p
选项来指定要使用的 UDP 端口。 -
使用
-P tcp
追踪 TCP 数据包:traceroute -P tcp example.com
这将使用 TCP 数据包进行追踪。在这种情况下,可以考虑结合
-p
选项来指定要使用的 TCP 端口。 -
其他协议:具体取决于所使用的
traceroute
实现,可能还支持其他原始数据包协议。
tracepath
参数
-4
: 使用 IPv4 进行跟踪。-6
: 使用 IPv6 进行跟踪。-b
: 打印目标主机的名称和 IP 地址。-l <length>
: 指定数据包的长度。-m <hops>
: 指定最大跳数(最大 TTL)。-n
: 禁止进行 DNS 名称解析。-p <port>
: 指定目标端口。-V
: 打印版本信息并退出。
在大多数情况下,tracepath
工具并没有直接提供指定出口的选项。tracepath
通常使用系统默认的路由表来确定数据包的出口。
1、禁止dns名称解析
root@lenovo:~# tracepath -n baidu.com
1?: [LOCALHOST] pmtu 1280
1: 172.26.160.1 0.264ms
1: 172.26.160.1 0.153ms
2: 192.168.31.1 4.050ms
3: 192.168.1.1 10.608ms
4: 125.119.8.1 39.794ms
……
30: no reply
Too many hops: pmtu 1280
Resume: pmtu 1280
2、指定端口
tracepath -p 80 baidu.com
1?: [LOCALHOST] pmtu 1280
1: lenovo 0.323ms
1: lenovo 0.208ms
2: 192.168.31.1 3.761ms
3: 192.168.1.1 36.388ms
4: 125.119.8.1 6.726ms……
30: no reply
Too many hops: pmtu 1280
Resume: pmtu 1280
mtr
mtr 全称 my traceroute,是一个把 ping 和 traceroute 合并到一个程序的网络诊断工具。
linux 可直接通过apt/yum install mtr 安装
-F, --filename FILE
: 从文件中读取主机名。-4
: 仅使用 IPv4。-6
: 仅使用 IPv6。-u, --udp
: 使用 UDP 替代 ICMP 回显。-T, --tcp
: 使用 TCP 替代 ICMP 回显。-I, --interface NAME
: 指定使用的网络接口。-a, --address ADDRESS
: 将传出套接字绑定到指定的地址。-f, --first-ttl NUMBER
: 设置起始 TTL。-m, --max-ttl NUMBER
: 设置最大跳数。-U, --max-unknown NUMBER
: 设置最大未知主机数。-P, --port PORT
: 设置 TCP、SCTP 或 UDP 的目标端口号。-s, --psize PACKETSIZE
: 设置用于探测的数据包大小。-B, --bitpattern NUMBER
: 设置在负载中使用的位模式。-i, --interval SECONDS
: 设置 ICMP 回显请求的间隔。-G, --gracetime SECONDS
: 设置等待响应的秒数。-Q, --tos NUMBER
: 设置 IP 头中的服务类型字段。-e, --mpls
: 显示 ICMP 扩展的信息。-Z, --timeout SECONDS
: 保持探测套接字打开的秒数。-M, --mark MARK
: 对每个发送的数据包进行标记。-r, --report
: 使用报告模式输出。-w, --report-wide
: 输出宽报告。-c, --report-cycles COUNT
: 设置发送的 ping 数量。-j, --json
: 输出 JSON 格式。-x, --xml
: 输出 XML 格式。-C, --csv
: 输出逗号分隔的值。-l, --raw
: 输出原始格式。-p, --split
: 分割输出。-t, --curses
: 使用 curses 终端界面。--displaymode MODE
: 选择初始显示模式。-n, --no-dns
: 不解析主机名。-b, --show-ips
: 显示 IP 数和主机名。-o, --order FIELDS
: 选择输出字段。-y, --ipinfo NUMBER
: 在输出中选择 IP 信息。-z, --aslookup
: 显示 AS 号码。-h, --help
: 显示帮助信息并退出。-v, --version
: 输出版本信息并退出。
执行mtr baidu.com
在这个输出中,我们可以看到从你的计算机(lenovo
,IP 地址为 172.26.169.96
)到百度网站(baidu.com
,IP 地址为 110.242.68.66
)的路径跟踪信息。每一行表示一个跳点,其中包括跳点的 IP 地址、丢包率、发送的数据包数量、最后一个数据包的延迟时间以及其他统计信息。
从输出中可以看到,跟踪经过了多个路由器,每个路由器都显示了不同的丢包率和延迟时间。在某些跳点上,出现了丢包率较高的情况,这可能是由于网络拥塞、路由器故障或防火墙过滤等原因导致的。最终,跟踪成功到达了目标主机(baidu.com
)。