一、为什么网络排障离不开抓包

很多网络问题只看命令行状态并不够,因为你只能看到“结果”,看不到“数据包到底发生了什么”。

抓包的主要目的通常有三个:

  • 抓指定协议的数据包
  • 抓指定端口的数据包
  • 抓指定 IP 的数据包

原始笔记里还列出了几种常见工具:

工具 特点
Wireshark 可视化抓包工具,适合分析
tcpdump Linux 常用命令行抓包工具
Fiddler 偏代理方式抓 HTTP 流量
Burp Suite 常用于安全测试和数据包修改

二、Wireshark 的基本使用思路

2.1 安装和选择网卡

Wireshark 可以直接从官网下载安装:

  • https://www.wireshark.org/

安装完成后,最关键的是选对接口。原始笔记里使用了 VMware 的虚拟网卡接口,也提到如果当前环境是桥接模式,也可能直接抓宿主机的 WLAN 网卡。

2.2 先明确自己想看什么

抓包前最好先想清楚目的:

  • 我想看握手过程
  • 我想看 DNS 请求
  • 我想看某个端口是否真的有流量
  • 我想看本机和某台服务器之间是否有通信

只有目标明确,过滤规则才会更高效。

三、Wireshark 过滤规则速查

3.1 按协议过滤

icmp
tcp
udp
http
arp
tls

3.2 按端口过滤

tcp.port == 80
udp.port == 53
tcp.srcport == 80
tcp.dstport == 80
udp.srcport == 80
udp.dstport == 80

3.3 按 IP 过滤

ip.addr == 10.0.0.200
ip.src == 10.0.0.200
ip.dst == 10.0.0.200

3.4 按大小或范围过滤

tcp.dstport <= 1024

常见运算符:

  • ==
  • <=
  • <
  • >=
  • >
  • !=

3.5 正则与包含过滤

当字段是字符串时,可以使用包含或正则匹配:

http ~ "baidu.com"
http.host ~ "[0-9]+(.com|.cn)"

3.6 与、或、非组合过滤

tcp.port >= 20 && tcp.port <= 1024
tcp.port >= 20 and tcp.port <= 1024
tcp.port == 80 && ip.addr == 10.0.0.200

四、tcpdump 的核心命令和思路

4.1 安装 tcpdump

yum install -y tcpdump

4.2 常用抓包命令

4.2.1 抓协议

tcpdump icmp
tcpdump -vvv -nnn icmp

4.2.2 抓端口

tcpdump -nnn port 80
tcpdump -nnn src port 80
tcpdump -nnn dst port 80

4.2.3 抓主机

tcpdump -nnn host 10.0.0.200

4.2.4 同时指定 IP 和端口

tcpdump -nnn src host 10.0.0.200 and port 80
tcpdump -nnn dst host 10.0.0.200 and port 80

4.2.5 指定网卡

tcpdump -i ens33

4.3 常见参数说明

  • -vvv:更详细输出
  • -n / -nn / -nnn:不解析主机名和端口名
  • -i:指定抓包网卡
  • -w:把数据包保存到文件

4.4 一个非常重要的注意点

原始笔记特别提醒:tcpdump 无法像 Wireshark 那样方便地直接做七层字符串过滤。实际工作里常见做法是:

1、先用 tcpdump 按 IP、端口、协议抓包 2、保存成 pcap 3、再用 Wireshark 做精细分析

五、抓三次握手与四次挥手的练手方法

原始笔记给出了一套非常实用的练习:

5.1 准备环境

yum install -y nc
nc -kl 9999
ss -lntup

如果环境影响抓包结果,也可以先关闭防火墙和 SELinux:

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
getenforce

5.2 Wireshark 过滤条件

tcp.port == 9999

5.3 重点观察内容

  • 客户端 SYN
  • 服务端 SYN, ACK
  • 客户端 ACK
  • 断开连接时的 FINACK

这套练习非常适合把“书上的 TCP 流程”和“真实的数据包”对应起来。

六、tcpdump + Wireshark 联合分析流程

这也是运维里最实用的一种抓包方式。

6.1 在 Linux 服务器上抓包并保存

tcpdump -vvv -nn -i eth0 port 80 or port 53 -w http-dns.pcap

这条命令表示:

  • eth0 上抓包
  • 只抓端口 8053
  • 保存成 http-dns.pcap

6.2 另开窗口制造流量

dig baidu.com
curl http://192.168.1.20/

这样就能同时抓到 DNS 查询和 HTTP 访问相关的数据包。

6.3 导出后用 Wireshark 打开

例如只看 DNS 报文,可以继续用下面的过滤条件:

udp.port == 53

如果只想看某台服务器,也可以叠加 ip.addr == x.x.x.x 继续缩小范围。

七、Wireshark 和 tcpdump 怎么分工

可以用一句话概括:

  • tcpdump 更适合在服务器上快速、低干扰地抓包
  • Wireshark 更适合在本地做细粒度可视化分析

当你在生产环境上没有图形界面,或者只想快速保留现场,优先用 tcpdump;需要深入看协议细节时,再把文件拉回本地用 Wireshark。

八、小结

抓包能力真正有价值的地方,不是“会用一个工具”,而是能回答这几个问题:

  • 包到底有没有发出去
  • 有没有回来
  • 是谁先断开的
  • DNS 到底解析到哪里了
  • 某个端口到底有没有真实流量

把 Wireshark 的过滤规则和 tcpdump 的抓包命令配合起来,很多平时很抽象的网络问题就会立刻变得可见。