Linux 网络命令一条龙:ping / DNS / 路由 / 抓包 / 端口
Linux 网络诊断最大的痛点不是命令难,而是不知道遇到什么问题该用哪个命令。这篇把常用的十几个网络命令按用途分成 6 类,每类都给出”什么时候用、用哪个、怎么用”。
一、按用途分类的全景图
graph TD
N{网络问题} --> A[诊断
能不能通] N --> B[DNS
域名能不能解析] N --> C[路由
包走哪条路] N --> D[连接
谁连了谁] N --> E[扫描
开了什么端口] N --> F[抓包
到底发了什么] 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]
能不能通] N --> B[DNS
域名能不能解析] N --> C[路由
包走哪条路] N --> D[连接
谁连了谁] N --> E[扫描
开了什么端口] N --> F[抓包
到底发了什么] 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)是通的:
ping example.comping -c 4 example.com # 只发 4 个包ping -i 0.2 -c 20 example.com # 0.2 秒间隔ping -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 排查首选
# 查 A 记录dig example.com
# 查 AAAA(IPv6)dig example.com AAAA
# 查 MXdig example.com MX
# 指定 DNS 服务器dig @8.8.8.8 example.com
# 简洁模式(只输出结果)dig +short example.com
# 完整跟踪(从根 DNS 开始)dig +trace example.com3.2 nslookup:随手快查
nslookup example.comnslookup example.com 8.8.8.83.3 getent:验证 hosts 文件 / NSS
getent hosts example.comgetent ahosts example.com🪤 经典坑:
dig查出来一个 IP,但浏览器访问另一个 IP——多半是/etc/hosts有覆盖。用getent才能看到操作系统真正用的解析结果。
四、路由类:traceroute / mtr / ip
4.1 traceroute / mtr:包走哪条路
# traceroute(每跳测一次)traceroute example.com
# mtr(动态、持续刷新,强烈推荐)mtr example.commtr -r -c 50 example.com # report 模式,跑 50 个包后给报告选机场 / 测 VPS 三网回程必备的就是
mtr,比 traceroute 更直观,能看到每跳的丢包率。
4.2 ip:现代化网络配置
ifconfig / route 已经被 ip 取代了,新发行版默认都不装 ifconfig:
# 查所有网卡ip addrip a # 缩写
# 查路由表ip routeip r # 缩写
# 查默认网关ip route show default
# 临时加 IPsudo ip addr add 192.168.1.100/24 dev eth0
# 临时加路由sudo ip route add 10.0.0.0/24 via 192.168.1.1
# 看网卡状态ip linkip link set eth0 upip link set eth0 down五、连接类:ss / netstat / curl / nc
5.1 ss / netstat:看谁连了谁
ss 是 netstat 的现代替代,速度快几个数量级,新服务器只装 ss 不装 netstat:
# 看所有 TCP 监听端口(带进程)sudo ss -lntp
# 看所有 UDP 监听sudo ss -lnup
# 看所有连接ss -tan
# 看某个端口在监听什么sudo ss -lntp | grep :443
# 统计 TCP 连接状态ss -snetstat 等价命令:
sudo netstat -lntpsudo netstat -lnup| 参数 | 含义 |
|---|---|
-l | listen 状态 |
-n | 不解析端口名/IP(更快) |
-t | TCP |
-u | UDP |
-p | 显示进程 |
-a | 全部连接 |
5.2 curl:HTTP 排查
# 看响应头curl -I https://example.com
# 看完整请求/响应(详细模式)curl -v https://example.com
# 强制 HTTP/2curl --http2 -I https://example.com
# 指定 DNS(绕过本机 DNS)curl --resolve example.com:443:1.2.3.4 https://example.com
# 通过代理curl -x http://127.0.0.1:7890 https://www.google.com
# 测速度(只关心耗时)curl -o /dev/null -s -w "DNS:%{time_namelookup} 连接:%{time_connect} 总:%{time_total}\n" https://example.com5.3 nc(netcat):快速验证端口可达
# 测 TCP 端口nc -zv example.com 443
# 测 UDP 端口nc -zvu example.com 53
# 监听端口(调试用,模拟服务)nc -l 9999
# 当临时聊天室(A 监听,B 连接)# A 机器:nc -l 9999# B 机器:nc <A_IP> 9999六、扫描类:nmap
主动扫描目标主机的开放端口:
# 扫常见端口nmap example.com
# 扫指定端口nmap -p 22,80,443 example.com
# 扫整个段nmap -p 22 192.168.1.0/24
# 系统识别 + 服务识别sudo nmap -sV -O example.com
# 快速 SYN 扫描(需 root)sudo nmap -sS example.com⚠️ 法律提示:nmap 扫描非授权目标在很多国家是违法的。除非是你自己的服务器或明确授权的目标,否则不要乱扫。
七、抓包类:tcpdump
终极排查武器,能看到链路层的所有字节:
# 抓某个网卡所有流量sudo tcpdump -i eth0
# 抓特定端口sudo tcpdump -i eth0 port 443
# 抓特定主机sudo tcpdump -i eth0 host 1.2.3.4
# 组合:抓某主机的某端口sudo tcpdump -i eth0 host 1.2.3.4 and port 443
# 不解析 IP/端口(更快)sudo tcpdump -nn -i eth0 port 443
# 保存到文件(Wireshark 打开分析)sudo tcpdump -i eth0 -w /tmp/capture.pcap port 443
# 读取文件tcpdump -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 分钟内定位到层级,剩下的就是查文档对症下药。