Linux命令-traceroute(IP 路由路径追踪)

Linux命令-traceroute(IP 路由路径追踪)

traceroute 是网络诊断的经典工具,通过发送递增 TTL(生存时间)的探测包,逐跳追踪 IP 数据包从源到目标的完整路由路径。它支持 ICMP、UDP 和 TCP 三种探测模式,比 tracepath 更灵活但需要 root 权限。

快速参考

bash 复制代码
traceroute [选项] 主机 [数据包大小]

权限提示 :traceroute 需要发送原始 IP 数据包,默认需要 root 权限。普通用户可以使用 tracepath 作为替代。在生产网络中大量发送探测包前,请确认不会触发安全告警。

基本用法

bash 复制代码
# 基本追踪
sudo traceroute example.com
sudo traceroute 8.8.8.8

# 不解析主机名(加速显示)
sudo traceroute -n 8.8.8.8

# 指定最大跳数
sudo traceroute -m 15 8.8.8.8

# 指定每个跳数的探测次数
sudo traceroute -q 3 8.8.8.8       # 默认 3 次
sudo traceroute -q 1 8.8.8.8       # 每跳只探测 1 次

# 指定超时时间
sudo traceroute -w 5 8.8.8.8       # 5 秒超时

# 指定数据包大小
sudo traceroute 8.8.8.8 1500

探测模式

bash 复制代码
# === UDP 模式(默认) ===
sudo traceroute example.com
# 使用高端口 UDP 数据包(默认端口 33434+)
# 适合通用路由追踪

# === ICMP 模式 ===
sudo traceroute -I example.com
# 使用 ICMP Echo Request
# 更容易穿透防火墙
# 需要 root 权限

# === TCP 模式(推荐用于防火墙检测) ===
sudo traceroute -T example.com
sudo traceroute -T -p 80 example.com     # 探测 TCP 80 端口
sudo traceroute -T -p 443 example.com    # 探测 TCP 443 端口
sudo traceroute -T -p 22 example.com     # 探测 TCP 22 端口

# TCP 模式可以发现哪些端口被防火墙阻断
sudo traceroute -T -p 80 -n firewall.example.com
# 如果某跳显示 * * * 且下一跳正常 → 该跳过滤了 TCP 80
# 如果所有跳都显示 * * * → 所有跳都过滤了 TCP 80

理解输出

bash 复制代码
# traceroute 输出示例:
# traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
#  1  gateway.local (192.168.1.1)  0.534 ms  0.612 ms  0.456 ms
#  2  10.0.0.1 (10.0.0.1)        1.234 ms  1.456 ms  1.345 ms
#  3  * * *
#  4  172.16.0.1 (172.16.0.1)    8.765 ms  9.123 ms  8.987 ms
#  5  isp-router (203.0.113.1)   15.234 ms 16.123 ms 15.567 ms
#  6  google-gw (8.8.8.8)         18.456 ms 19.234 ms 18.789 ms

# * * * 表示:
# - 防火墙丢弃了探测包
# - 路由器不响应 TTL 超时
# - 网络拥塞导致超时

# 三列时间 = 三次探测的 RTT
# 主机名可能显示为 IP(-n 选项或 DNS 解析失败)

高级选项

bash 复制代码
# 接口指定
sudo traceroute -i eth0 8.8.8.8

# 源地址
sudo traceroute -s 192.168.1.100 8.8.8.8

# Type of Service (TOS)
sudo traceroute -t 1 8.8.8.8     # 低延迟
sudo traceroute -t 2 8.8.8.8     # 高吞吐量

# 不设置分片标志
sudo traceroute -F 8.8.8.8

# 设置具体数值
sudo traceroute --mtu 8.8.8.8    # 类似 tracepath 的 MTU 检测

# 紧凑输出
sudo traceroute -N 1 8.8.8.8     # 不显示多行 RTT

# 显示 AS 编号
sudo traceroute -A 8.8.8.8       # 需要安装 whois

防火墙探测

bash 复制代码
#!/bin/bash
# 使用 traceroute TCP 模式检测防火墙规则
# 用法: ./fw_detect.sh [目标]

TARGET="${1:-example.com}"
PORTS=(22 80 443 3306 8080 8443)

echo "防火墙规则检测: $TARGET"
echo "=============================="
echo ""

for PORT in "${PORTS[@]}"; do
    echo "--- 端口 $PORT ---"
    RESULT=$(sudo traceroute -T -n -p "$PORT" -m 10 -q 1 -w 2 "$TARGET" 2>&1)
    # 检查是否到达目标
    LAST_LINE=$(echo "$RESULT" | tail -1)
    if echo "$LAST_LINE" | grep -q "$PORT"; then
        echo "  端口 $PORT: 开放(可达)"
    else
        # 统计有多少跳不响应
        STAR_COUNT=$(echo "$RESULT" | grep -c '^\s*[0-9].*\*')
        echo "  端口 $PORT: ${STAR_COUNT} 跳不响应"
    fi
done

mtr - traceroute 的升级版

bash 复制代码
# mtr (My Traceroute) 结合了 traceroute 和 ping 的功能
# 安装:
sudo apt-get install mtr    # Debian/Ubuntu
sudo yum install mtr        # RHEL/CentOS

# 基本用法
sudo mtr example.com
mtr --report example.com    # 报告模式

# 不解析 DNS
mtr -n example.com

# ICMP/TCP 模式
sudo mtr -T -p 80 example.com   # TCP 80
sudo mtr -u example.com          # UDP
sudo mtr -I example.com          # ICMP

# 输出报告(脚本中常用)
mtr --report --report-cycles 10 -n example.com

选项速查

选项 说明
-I 使用 ICMP 探测
-T 使用 TCP 探测
-U 使用 UDP 探测(默认)
-n 不解析主机名
-m N 最大跳数
-q N 每跳探测次数
-w SEC 超时时间
-p PORT 目标端口(TCP 模式)
-i IFACE 指定源接口
-s ADDR 指定源地址
-A 显示 AS 编号
-F 不设置分片标志

traceroute 是网络诊断的经典工具,从 1987 年诞生至今仍是排查网络连通性问题的首选。TCP 模式(-T)是检测防火墙规则的利器,而 mtr 则提供了更直观的实时诊断视图。对于不需要 root 权限的场景,优先使用 tracepath。

相关推荐
速捷工控 PLC触摸屏还原程序13 分钟前
S7-200 SMART程序上传提示密码?维修、改造和换机怎么选处理路径?
运维·服务器
北风toto40 分钟前
Linux 服务器如何判断 CPU 是否支持 x86-64-v2 指令集
java·linux·服务器
程序员-Benothing43 分钟前
Linux抓包分析教程:tcpdump、Wireshark、tshark实战
linux·运维·服务器
QMCY_jason1 小时前
ubuntu x86_64架构的编译 aarch64架构的程序
linux·运维·ubuntu
分布式存储与RustFS1 小时前
RustFS 该跟 stable 还是 nightly?两条版本线的分工、风险与回退,一张表说清
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
拂拉氏1 小时前
【知识讲解】 Linux进程间通信之管道与共享内存
linux·进程间通信
其实防守也摸鱼1 小时前
Linux文本处理命令理论学习
linux·服务器·前端·数据库·sql·学习·安全
无足鸟ICT1 小时前
【RHCA+】rpm命令(安装、升级、卸载和查询)
linux·运维·服务器
吹什么轩1 小时前
linux系统复习:从冯·诺依曼到操作系统:一切的开场
linux·运维·服务器
程序员-Benothing1 小时前
SSH从入门到精通:密钥登录、config配置、跳板机
linux·运维·服务器·ssh