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。

相关推荐
YoungStudyAI4 小时前
QA的下一个自动化阶段,可能不是再写更多脚本,而是设计测试Agent
运维·自动化
分布式存储与RustFS5 小时前
纠删码到底吃掉了多少容量:EC:4、EC:8 的利用率与容错怎么算
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
遇见小修修5 小时前
3步解决打印机0x00000709报错 ,广州深圳程序员可自行排查
运维·打印机·维修·打印机报错·打印机运维·打印机故障自查
顺顺 尼5 小时前
linux 进程信号(上)
linux·c++·算法
niuTaylor6 小时前
飞腾 FT-2000/4 Ubuntu 内存卡 / NVMe SSD 系统制作完整指南
linux·服务器·人工智能·驱动开发·单片机
傲世仙尊7 小时前
信号量环形队列与线程池起步-把临界资源拆成很多份
linux
Huangjin007_7 小时前
【Linux 系统篇(二十五)】文件(二) 系统文件I/O详解
linux·运维·服务器
XiaoMaqqqq7 小时前
目前知名的IP驱动产业新场景新工具有哪些
网络·python·网络协议·tcp/ip
微小冷8 小时前
Mermaid画甘特图
运维·markdown·甘特图·mermaid·时间图
ShineWinsu8 小时前
对于ProtoBuffer:ProtoBuffer的介绍以及安装
linux·网络·google·协议·序列化·反序列化·protobuffer