Linux 网络命令一条龙:ping / DNS / 路由 / 抓包 / 端口
Linux 网络诊断最大的痛点不是命令难,而是不知道遇到什么问题该用哪个命令。这篇把常用的十几个网络命令按用途分成 6 类,每类都给出”什么时候用、用哪个、怎么用”。
一、按用途分类的全景图#
graph TD
N{网络问题} --> A[诊断<br/>能不能通]
N --> B[DNS<br/>域名能不能解析]
N --> C[路由<br/>包走哪条路]
N --> D[连接<br/>谁连了谁]
N --> E[扫描<br/>开了什么端口]
N --> F[抓包<br/>到底发了什么]
A --> A1[ping]
B --> B1[dig / nslookup / getent]
C --> C1[traceroute / mtr / ip route]
D --> D1[ss / netstat / curl / nc]
E --> E1[nmap]
F --> F1[tcpdump]
下面分别展开。
二、诊断类:ping#
最基础的联通性测试,能不能 ping 通至少证明网络层(ICMP)是通的:
1ping example.com2ping -c 4 example.com # 只发 4 个包3ping -i 0.2 -c 20 example.com # 0.2 秒间隔4ping -s 1400 example.com # 测试大包是否分片丢失🪤
ping不通不等于服务不可用。很多服务器会禁 ICMP,但 80/443 照常工作。
三、DNS 类:dig / nslookup / getent#
三个工具的定位完全不一样,别混着用:
| 工具 | 走系统解析? | 输出详细度 | 适合场景 |
|---|---|---|---|
nslookup | 否(直接问 DNS) | 简略 | 快速查记录 |
dig | 否(直接问 DNS) | 完整(含 TTL、authority) | 排查 DNS 问题首选 |
getent | 是(走 NSS) | 简略 | 验证 /etc/hosts 是否生效 |
3.1 dig:DNS 排查首选#
1# 查 A 记录2dig example.com3
4# 查 AAAA(IPv6)5dig example.com AAAA6
7# 查 MX8dig example.com MX9
10# 指定 DNS 服务器11dig @8.8.8.8 example.com12
13# 简洁模式(只输出结果)14dig +short example.com15
16# 完整跟踪(从根 DNS 开始)17dig +trace example.com3.2 nslookup:随手快查#
1nslookup example.com2nslookup example.com 8.8.8.83.3 getent:验证 hosts 文件 / NSS#
1getent hosts example.com2getent ahosts example.com🪤 经典坑:
dig查出来一个 IP,但浏览器访问另一个 IP——多半是/etc/hosts有覆盖。用getent才能看到操作系统真正用的解析结果。
四、路由类:traceroute / mtr / ip#
4.1 traceroute / mtr:包走哪条路#
1# traceroute(每跳测一次)2traceroute example.com3
4# mtr(动态、持续刷新,强烈推荐)5mtr example.com6mtr -r -c 50 example.com # report 模式,跑 50 个包后给报告选机场 / 测 VPS 三网回程必备的就是
mtr,比 traceroute 更直观,能看到每跳的丢包率。
4.2 ip:现代化网络配置#
ifconfig / route 已经被 ip 取代了,新发行版默认都不装 ifconfig:
1# 查所有网卡2ip addr3ip a # 缩写4
5# 查路由表6ip route7ip r # 缩写8
9# 查默认网关10ip route show default11
12# 临时加 IP13sudo ip addr add 192.168.1.100/24 dev eth014
15# 临时加路由16sudo ip route add 10.0.0.0/24 via 192.168.1.117
18# 看网卡状态19ip link20ip link set eth0 up21ip link set eth0 down五、连接类:ss / netstat / curl / nc#
5.1 ss / netstat:看谁连了谁#
ss 是 netstat 的现代替代,速度快几个数量级,新服务器只装 ss 不装 netstat:
1# 看所有 TCP 监听端口(带进程)2sudo ss -lntp3
4# 看所有 UDP 监听5sudo ss -lnup6
7# 看所有连接8ss -tan9
10# 看某个端口在监听什么11sudo ss -lntp | grep :44312
13# 统计 TCP 连接状态14ss -snetstat 等价命令:
1sudo netstat -lntp2sudo netstat -lnup| 参数 | 含义 |
|---|---|
-l | listen 状态 |
-n | 不解析端口名/IP(更快) |
-t | TCP |
-u | UDP |
-p | 显示进程 |
-a | 全部连接 |
5.2 curl:HTTP 排查#
1# 看响应头2curl -I https://example.com3
4# 看完整请求/响应(详细模式)5curl -v https://example.com6
7# 强制 HTTP/28curl --http2 -I https://example.com9
10# 指定 DNS(绕过本机 DNS)11curl --resolve example.com:443:1.2.3.4 https://example.com12
13# 通过代理14curl -x http://127.0.0.1:7890 https://www.google.com15
16# 测速度(只关心耗时)17curl -o /dev/null -s -w "DNS:%{time_namelookup} 连接:%{time_connect} 总:%{time_total}\n" https://example.com5.3 nc(netcat):快速验证端口可达#
1# 测 TCP 端口2nc -zv example.com 4433
4# 测 UDP 端口5nc -zvu example.com 536
7# 监听端口(调试用,模拟服务)8nc -l 99999
10# 当临时聊天室(A 监听,B 连接)11# A 机器:nc -l 999912# B 机器:nc <A_IP> 9999六、扫描类:nmap#
主动扫描目标主机的开放端口:
1# 扫常见端口2nmap example.com3
4# 扫指定端口5nmap -p 22,80,443 example.com6
7# 扫整个段8nmap -p 22 192.168.1.0/249
10# 系统识别 + 服务识别11sudo nmap -sV -O example.com12
13# 快速 SYN 扫描(需 root)14sudo nmap -sS example.com⚠️ 法律提示:nmap 扫描非授权目标在很多国家是违法的。除非是你自己的服务器或明确授权的目标,否则不要乱扫。
七、抓包类:tcpdump#
终极排查武器,能看到链路层的所有字节:
1# 抓某个网卡所有流量2sudo tcpdump -i eth03
4# 抓特定端口5sudo tcpdump -i eth0 port 4436
7# 抓特定主机8sudo tcpdump -i eth0 host 1.2.3.49
10# 组合:抓某主机的某端口11sudo tcpdump -i eth0 host 1.2.3.4 and port 44312
13# 不解析 IP/端口(更快)14sudo tcpdump -nn -i eth0 port 44315
16# 保存到文件(Wireshark 打开分析)17sudo tcpdump -i eth0 -w /tmp/capture.pcap port 44318
19# 读取文件20tcpdump -r /tmp/capture.pcap| 参数 | 含义 |
|---|---|
-i | 指定网卡 |
-n | 不解析 IP |
-nn | 不解析 IP 也不解析端口 |
-w file | 保存为 pcap |
-r file | 读取 pcap |
-c N | 抓 N 个包就停 |
-A | 用 ASCII 显示包内容 |
-X | 用十六进制 + ASCII |
八、按”网络故障类型”快速找命令#
| 故障表现 | 用哪个命令 |
|---|---|
| 完全不通 | ping → traceroute/mtr |
| 域名解析有问题 | dig → getent → 查 /etc/resolv.conf |
| 解析对了但访问慢 | mtr 看路由跳数和丢包 |
| HTTP 返回错(502/504) | curl -v 看响应头 |
| 服务起了端口不通 | ss -lntp 看是否真的在监听 |
| 端口监听了但外网不通 | 防火墙 / 云厂商安全组 |
| 抓不到包定位不了 | tcpdump 看链路层到底有没有包 |
| 想知道目标开了哪些端口 | nmap |
九、几条实用经验#
ss -lntp是 Linux 上lsof -i的轻量版,记一个就够。mtr -r -c 100是 VPS 测线路的标准姿势,跑 100 个包出报告再下判断。curl -v比wget适合排查 HTTPS 问题,看握手细节、跳转、证书。tcpdump抓包写文件再用 Wireshark 看,命令行肉眼盯包效率太低。dig +short写脚本时最好用,直接拿 IP 不用解析多行输出。
这一套命令熟练之后,90% 的网络问题能在 2 分钟内定位到层级,剩下的就是查文档对症下药。