Daimon's Blog
主页 归档 关于 RSS 探针 常用工具
主页
归档
关于
RSS
探针
常用工具

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

daimon daimon 2026-04-11 #Linux#网络#DNS#tcpdump#网络诊断

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]

下面分别展开。

二、诊断类:ping#

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

Terminal window
1
ping example.com
2
ping -c 4 example.com # 只发 4 个包
3
ping -i 0.2 -c 20 example.com # 0.2 秒间隔
4
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 排查首选#

Terminal window
1
# 查 A 记录
2
dig example.com
3
4
# 查 AAAA(IPv6)
5
dig example.com AAAA
6
7
# 查 MX
8
dig example.com MX
9
10
# 指定 DNS 服务器
11
dig @8.8.8.8 example.com
12
13
# 简洁模式(只输出结果)
14
dig +short example.com
15
16
# 完整跟踪(从根 DNS 开始)
17
dig +trace example.com

3.2 nslookup:随手快查#

Terminal window
1
nslookup example.com
2
nslookup example.com 8.8.8.8

3.3 getent:验证 hosts 文件 / NSS#

Terminal window
1
getent hosts example.com
2
getent ahosts example.com

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

四、路由类:traceroute / mtr / ip#

4.1 traceroute / mtr:包走哪条路#

Terminal window
1
# traceroute(每跳测一次)
2
traceroute example.com
3
4
# mtr(动态、持续刷新,强烈推荐)
5
mtr example.com
6
mtr -r -c 50 example.com # report 模式,跑 50 个包后给报告

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

4.2 ip:现代化网络配置#

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

Terminal window
1
# 查所有网卡
2
ip addr
3
ip a # 缩写
4
5
# 查路由表
6
ip route
7
ip r # 缩写
8
9
# 查默认网关
10
ip route show default
11
12
# 临时加 IP
13
sudo ip addr add 192.168.1.100/24 dev eth0
14
15
# 临时加路由
16
sudo ip route add 10.0.0.0/24 via 192.168.1.1
17
18
# 看网卡状态
19
ip link
20
ip link set eth0 up
21
ip link set eth0 down

五、连接类:ss / netstat / curl / nc#

5.1 ss / netstat:看谁连了谁#

ss 是 netstat 的现代替代,速度快几个数量级,新服务器只装 ss 不装 netstat:

Terminal window
1
# 看所有 TCP 监听端口(带进程)
2
sudo ss -lntp
3
4
# 看所有 UDP 监听
5
sudo ss -lnup
6
7
# 看所有连接
8
ss -tan
9
10
# 看某个端口在监听什么
11
sudo ss -lntp | grep :443
12
13
# 统计 TCP 连接状态
14
ss -s

netstat 等价命令:

Terminal window
1
sudo netstat -lntp
2
sudo netstat -lnup
参数含义
-llisten 状态
-n不解析端口名/IP(更快)
-tTCP
-uUDP
-p显示进程
-a全部连接

5.2 curl:HTTP 排查#

Terminal window
1
# 看响应头
2
curl -I https://example.com
3
4
# 看完整请求/响应(详细模式)
5
curl -v https://example.com
6
7
# 强制 HTTP/2
8
curl --http2 -I https://example.com
9
10
# 指定 DNS(绕过本机 DNS)
11
curl --resolve example.com:443:1.2.3.4 https://example.com
12
13
# 通过代理
14
curl -x http://127.0.0.1:7890 https://www.google.com
15
16
# 测速度(只关心耗时)
17
curl -o /dev/null -s -w "DNS:%{time_namelookup} 连接:%{time_connect} 总:%{time_total}\n" https://example.com

5.3 nc(netcat):快速验证端口可达#

Terminal window
1
# 测 TCP 端口
2
nc -zv example.com 443
3
4
# 测 UDP 端口
5
nc -zvu example.com 53
6
7
# 监听端口(调试用,模拟服务)
8
nc -l 9999
9
10
# 当临时聊天室(A 监听,B 连接)
11
# A 机器:nc -l 9999
12
# B 机器:nc <A_IP> 9999

六、扫描类:nmap#

主动扫描目标主机的开放端口:

Terminal window
1
# 扫常见端口
2
nmap example.com
3
4
# 扫指定端口
5
nmap -p 22,80,443 example.com
6
7
# 扫整个段
8
nmap -p 22 192.168.1.0/24
9
10
# 系统识别 + 服务识别
11
sudo nmap -sV -O example.com
12
13
# 快速 SYN 扫描(需 root)
14
sudo nmap -sS example.com

⚠️ 法律提示:nmap 扫描非授权目标在很多国家是违法的。除非是你自己的服务器或明确授权的目标,否则不要乱扫。

七、抓包类:tcpdump#

终极排查武器,能看到链路层的所有字节:

Terminal window
1
# 抓某个网卡所有流量
2
sudo tcpdump -i eth0
3
4
# 抓特定端口
5
sudo tcpdump -i eth0 port 443
6
7
# 抓特定主机
8
sudo tcpdump -i eth0 host 1.2.3.4
9
10
# 组合:抓某主机的某端口
11
sudo tcpdump -i eth0 host 1.2.3.4 and port 443
12
13
# 不解析 IP/端口(更快)
14
sudo tcpdump -nn -i eth0 port 443
15
16
# 保存到文件(Wireshark 打开分析)
17
sudo tcpdump -i eth0 -w /tmp/capture.pcap port 443
18
19
# 读取文件
20
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 分钟内定位到层级,剩下的就是查文档对症下药。

mihomo 裸核部署完全指南:Linux / Windows 双平台 + Web 面板
1Panel 全教程:用一个面板把 VPS 管理得明明白白
本博客所有文章除特别声明外,均遵循 CC BY-NC-SA 4.0 协议,转载请注明出处。
博客框架 Astro & Fuwari
冀ICP备20260167号
1
一、按用途分类的全景图
2
二、诊断类:ping
3
三、DNS 类:dig / nslookup / getent
3.1 dig:DNS 排查首选
3.2 nslookup:随手快查
3.3 getent:验证 hosts 文件 / NSS
4
四、路由类:traceroute / mtr / ip
4.1 traceroute / mtr:包走哪条路
4.2 ip:现代化网络配置
5
五、连接类:ss / netstat / curl / nc
5.1 ss / netstat:看谁连了谁
5.2 curl:HTTP 排查
5.3 nc(netcat):快速验证端口可达
6
六、扫描类:nmap
7
七、抓包类:tcpdump
8
八、按”网络故障类型”快速找命令
9
九、几条实用经验