Linux 网络命令一条龙:ping / DNS / 路由 / 抓包 / 端口

目录

Linux 网络诊断最大的痛点不是命令难,而是不知道遇到什么问题该用哪个命令。这篇把常用的十几个网络命令按用途分成 6 类,每类都给出“什么时候用、用哪个、怎么用”。

一、按用途分类的全景图

流程图流程图

下面分别展开。

二、诊断类:ping

最基础的联通性测试,能不能 ping 通至少证明网络层(ICMP)是通的:

ping example.com
ping -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

# 查 MX
dig example.com MX

# 指定 DNS 服务器
dig @8.8.8.8 example.com

# 简洁模式(只输出结果)
dig +short example.com

# 完整跟踪(从根 DNS 开始)
dig +trace example.com

3.2 nslookup:随手快查

nslookup example.com
nslookup example.com 8.8.8.8

3.3 getent:验证 hosts 文件 / NSS

getent hosts example.com
getent ahosts example.com

🪤 经典坑:dig 查出来一个 IP,但浏览器访问另一个 IP——多半是 /etc/hosts 有覆盖。用 getent 才能看到操作系统真正用的解析结果。

四、路由类:traceroute / mtr / ip

4.1 traceroute / mtr:包走哪条路

# traceroute(每跳测一次)
traceroute example.com

# mtr(动态、持续刷新,强烈推荐)
mtr example.com
mtr -r -c 50 example.com    # report 模式,跑 50 个包后给报告

选机场 / 测 VPS 三网回程必备的就是 mtr,比 traceroute 更直观,能看到每跳的丢包率。

4.2 ip:现代化网络配置

ifconfig / route 已经被 ip 取代了,新发行版默认都不装 ifconfig:

# 查所有网卡
ip addr
ip a                # 缩写

# 查路由表
ip route
ip r                # 缩写

# 查默认网关
ip route show default

# 临时加 IP
sudo 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 link
ip link set eth0 up
ip 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 -s

netstat 等价命令:

sudo netstat -lntp
sudo 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/2
curl --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.com

5.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 分钟内定位到层级,剩下的就是查文档对症下药。