一、为什么网络排障离不开抓包¶
很多网络问题只看命令行状态并不够,因为你只能看到“结果”,看不到“数据包到底发生了什么”。
抓包的主要目的通常有三个:
- 抓指定协议的数据包
- 抓指定端口的数据包
- 抓指定 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 - 断开连接时的
FIN与ACK
这套练习非常适合把“书上的 TCP 流程”和“真实的数据包”对应起来。
六、tcpdump + Wireshark 联合分析流程¶
这也是运维里最实用的一种抓包方式。
6.1 在 Linux 服务器上抓包并保存¶
tcpdump -vvv -nn -i eth0 port 80 or port 53 -w http-dns.pcap
这条命令表示:
- 在
eth0上抓包 - 只抓端口
80或53 - 保存成
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 的抓包命令配合起来,很多平时很抽象的网络问题就会立刻变得可见。