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。

相关推荐
2035去旅行31 分钟前
bootcmd 详细讲解
linux·嵌入式·arm·soc
分布式存储与RustFS35 分钟前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
陈希1231 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
女神下凡2 小时前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
@兽血沸腾2 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
Java成神之路-3 小时前
TCP Socket 与 UDP Socket
tcp/ip·计算机网络·udp
且从容.5 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道6 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
讯捷蓝达8 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.9 小时前
ubuntu安装flink
linux·ubuntu·flink