《网络诊断: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)」的流程可以系统化定位绝大多数网络故障。
阅读 —
·
全站 —