《网络诊断:nc/telnet/tcpdump/traceroute/mtr/dig/nslookup》

《网络诊断:nc/telnet/tcpdump/traceroute/mtr/dig/nslookup》

本文汇总网络排障常用的链路诊断、DNS 查询与抓包工具,覆盖从「连通性」到「路径」再到「报文」的排查链条。

1 连通性/服务探测:nc、telnet

1.1 nc(netcat)

安装:apt-get install netcat -y。常用场景:

# 检查端口是否打开(TCP) nc -w 1 -nv 1.1.1.1 5000 # 检查 UDP 端口是否打开 nc -uw 1 -nv 1.1.1.2 5000 # 端口扫描(-z 只探测不发送数据,-v 显示详情) nc -z -v hostname 22 nc -zv hostname 80 # 扫描 1-1023 端口 nc -zv host1.example.com 1-1023

条件:可使用 netcat 直接发 HTTP 请求:

printf "GET /metrics HTTP/1.1\r\nHost: 127.0.0.1\r\nAccept: */*\r\nConnection: close\r\n\r\n" | nc -w 1 -nv 127.0.0.1 8090 # 把 raw 请求从文件读入(适合复现抓包得到的内容) nc -w 1 1.1.1.1 80 < req.txt

两台机器间直接传文件:

# 接收方(机器 B)监听端口写文件 nc -l -p 9000 > receive.tar.gz # 发送方(机器 A) nc <B_ip> 9000 < local.tar.gz

模拟一个简单的 TCP Server:

nc -l -p 8099

netcat 富利版本中 ncat 提供 --keep-open,适合转发多请求。

1.2 telnet

telnet 连接也常用于探测端口与手动验证 HTTP 服务:

telnet www.example.com 80 # 输入(注意 HTTP 协议头以空行结尾,需要回车两次) GET / HTTP/1.1 Host: www.example.com

2 链路路径:traceroute / mtr

2.1 traceroute

追踪数据包经过的每一跳(网关),默认使用 UDP 探测,最多 30 跳:

traceroute -m 5 www.example.com # 设最大跳数 5 traceroute -n www.example.com # 不做 DNS 反解析,输出 IP

注意点:

  • 某些行显示 *** 可能是防火墙屏蔽 ICMP/防火墙等导致的探测包。
  • 某跳时间较长可能是该网关阻塞或 DNS 解析慢,加 -n 可规避 DNS 解析耗时。

2.2 mtr

mtr 结合 ping+traceroute,逐跳统计丢包率与延迟,更适合排查质量:

mtr -r -c 10 example.com # -r 报告模式 -c 发送包数量 mtr -n example.com # 不反解域名 mtr -4/-6 example.com # 指定 IPV4/IPV6

输出列说明:

列名 说明
Loss 丢包率
Snt 已发送数据包数量(-c 可定制)
Last/Avg/Best/Wrst 最近/平均/最好/最差时延(ms)
StDev 时延标准差

使用中的交互键:d 切换显示模式、n 启停 DNS 解析、u 切换 ICMP/UDP 探测。

3 DNS 查询:dig / nslookup

apt-get install -y dnsutils # Debian/Ubuntu 安装(包含 dig、nslookup) # 基本查询 dig www.example.com nslookup www.example.com # 指定 DNS 服务器与端口(如本地 unbound) dig @127.0.0.1 -p 1953 www.example.com

配一个本地 unbound,实现「自定义域名解析到指定 IP」,适合本地联调 CDN/域名绑定需求:

# /etc/unbound/unbound.conf.d/local.conf server: local-data: "www.fake.net. IN A 127.0.0.1" interface: 127.0.0.1 port: 1953 access-control: 127.0.0.0/8 allow

然后 dig @127.0.0.1 -p 1953 www.fake.net 即可返回自定义 A 记录。

4 抓包:tcpdump

tcpdump 用于实时抓取和展示网络报文,是协议排障利器。

# 抓取某个主机的 TCP 包并保存 pcap(-A 打印 ASCII,-vvv 详细,-nnn 不解析) tcpdump -i any tcp and host your.server -A -vvv -nnn -w domain.pcap # 抓 DNS 查询/应答(53 端口) sudo tcpdump -i en0 -nt -s 500 port domain # 列出本机网卡 tcpdump -D 1.en0 [Up, Running] 2.lo0 [Up, Running, Loopback]

常用选项:-i 指定网卡、-n 不做 DNS 解析、-t 不输出时间戳、-w 写文件、-X/-x 显示报文逐字节十六进制。分析 DNS 报文时,开启 -X 可看到 28 字节的查询报文与完整应答的具体内容。

5 网卡与路由

# 安装 net-tools(包含 ifconfig、netstat) apt-get install net-tools -y # 查看网卡配置 ifconfig # 查看路由表 route -n

路由表标记含义:

标记 含义
U 路由已生效(up)
G 路由经由网关(否则是直连路由)
H 目标是单台主机地址
D 由 redirect 创建的动态路由
M 被 redirect 修改过的路由

6 总结

按照「端口探测(nc/telnet)→ 路径质量(traceroute/mtr)→ DNS 解析(dig/nslookup)→ 报文分析(tcpdump)」的流程可以系统化定位绝大多数网络故障。

阅读 — · 全站 —
🎸 我的歌单 0 首