抓包入门:配置抓包过滤器、捕获第一个HTTP包、理解数据包结构
说实话,很多初学者一上来就点开Wireshark,看到满屏花花绿绿的包直接懵了。我当年也是这样,第一次抓包时盯着屏幕看了十分钟,完全不知道从哪下手。后来带团队时发现,90%的新人卡就卡在这一步——不是不会装软件,而是不会有目的地抓。
这一章,咱们就解决三个核心问题:怎么只抓你想要的包、怎么抓到第一个HTTP包、抓到之后怎么看懂它。
1. 抓包过滤器:别让垃圾数据淹了你
Wireshark有两种过滤器,很多人搞混。我习惯这么记:抓包过滤器是「进门安检」,不符合条件的包根本进不来;显示过滤器是「事后筛选」,数据已经抓下来了,只是暂时藏起来。
核心原则:抓包过滤器用BPF语法,显示过滤器用Wireshark自己的语法。别混用,否则你会怀疑人生。
1.1 抓包过滤器(Capture Filter)配置
配置位置:Capture → Options → Capture Filter。或者直接在输入框里写。
常用的BPF表达式,我列个表,你直接复制用:
| 场景 | BPF表达式 | 说明 |
|---|---|---|
| 只抓HTTP | tcp port 80 |
HTTP默认端口80 |
| 只抓HTTPS | tcp port 443 |
加密流量,只能看到握手 |
| 只抓某个IP | host 192.168.1.1 |
双向流量都抓 |
| 排除某个IP | not host 10.0.0.5 |
过滤掉噪声 |
| 只抓DNS | udp port 53 |
域名解析查询 |
| 组合条件 | tcp port 80 and host 192.168.1.1 |
与逻辑 |
我的小技巧:在命令行里用tcpdump先试过滤器,确认语法正确再贴到Wireshark里。tcpdump报错信息比Wireshark友好得多。
1.2 显示过滤器(Display Filter)配置
这个更灵活,直接在Wireshark顶部的Filter栏输入就行。语法和BPF完全不同,别搞混。
几个我天天用的:
http—— 只看HTTP协议包http.request.method == "GET"—— 只看GET请求ip.addr == 192.168.1.1—— 只看某个IPtcp.port == 443—— 只看443端口!arp—— 排除ARP广播(这玩意儿最吵)
我曾经踩过的坑:在抓包过滤器里写了http,结果Wireshark报错。后来才反应过来——抓包过滤器不认识http这个关键字,得写tcp port 80。显示过滤器才认http。
2. 捕获第一个HTTP包
好,理论说完了,咱们动手。我带你走一遍完整流程。
2.1 准备工作
- 打开Wireshark,选择正确的网卡(有线选以太网,无线选Wi-Fi)
- 在Capture Filter里输入:
tcp port 80 - 点击Start开始抓包
- 打开浏览器,访问一个HTTP网站(比如
http://example.com) - 等页面加载完,回到Wireshark点Stop
嗯,这时候你应该能看到一些包了。如果全是乱七八糟的协议,说明过滤器没生效,检查一下是不是写错了位置。
2.2 找到HTTP请求
在显示过滤器里输入 http,Wireshark会自动过滤出HTTP相关的包。你会看到类似这样的结构:
No. Time Source Destination Protocol Info
1 0.000000 192.168.1.100 93.184.216.34 TCP 80 → 80 [SYN] Seq=0
2 0.045000 93.184.216.34 192.168.1.100 TCP 80 → 80 [SYN, ACK] Seq=0 Ack=1
3 0.045100 192.168.1.100 93.184.216.34 TCP 80 → 80 [ACK] Seq=1 Ack=1
4 0.045200 192.168.1.100 93.184.216.34 HTTP GET / HTTP/1.1
5 0.089000 93.184.216.34 192.168.1.100 TCP 80 → 80 [ACK] Seq=1 Ack=100
6 0.089500 93.184.216.34 192.168.1.100 HTTP HTTP/1.1 200 OK
看到了吗?前三个包是TCP三次握手,第四个才是真正的HTTP GET请求,第六个是服务器的200响应。
关键点:HTTP是应用层协议,它依赖TCP的可靠传输。所以每次HTTP请求前,必然先有三次握手。这是面试常考题,也是排查问题的起点。
3. 理解数据包结构
双击任意一个HTTP包,Wireshark会展开详细面板。我习惯把面板分成三块看:
- Packet List(包列表):上面那部分,看概览
- Packet Details(包详情):中间那部分,看协议层级
- Packet Bytes(包字节):下面那部分,看原始二进制
咱们重点看中间这块。展开后,你会看到类似这样的层级结构:
Frame 4: 100 bytes on wire (800 bits)
├── Ethernet II, Src: xx:xx:xx:xx:xx:xx, Dst: xx:xx:xx:xx:xx:xx
├── Internet Protocol Version 4, Src: 192.168.1.100, Dst: 93.184.216.34
├── Transmission Control Protocol, Src Port: 54321, Dst Port: 80
└── Hypertext Transfer Protocol
├── GET / HTTP/1.1\r\n
├── Host: example.com\r\n
├── User-Agent: Mozilla/5.0\r\n
└── [Full request URI: http://example.com/]
这个结构其实就是TCP/IP协议栈的封装过程。数据从应用层往下走,每层加一个头部:
| 层级 | 协议 | 头部内容 | 长度(典型值) |
|---|---|---|---|
| 应用层 | HTTP | 请求行、头部、正文 | 可变 |
| 传输层 | TCP | 源端口、目的端口、序列号、确认号 | 20字节 |
| 网络层 | IP | 源IP、目的IP、TTL、协议类型 | 20字节 |
| 链路层 | Ethernet | 源MAC、目的MAC、类型 | 14字节 |
你想想看,一个HTTP请求从浏览器发出,先被TCP包上端口信息,再被IP包上地址信息,最后被以太网包上MAC地址。到了服务器端,再一层层拆开。这就是封装与解封装,TCP/IP协议栈最核心的机制。
我的习惯:看包的时候,先看IP层确认源和目标对不对,再看TCP层确认端口和序列号,最后看应用层内容。按这个顺序,排查问题最快。
4. 本章知识体系
下面这张图,把咱们这章的核心逻辑串起来了。从配置过滤器开始,到抓到HTTP包,再到理解包结构,每一步都有对应关系。
5. 避坑指南
最后,分享几个我这些年踩过的坑,你遇到了能少走弯路:
- 抓不到HTTP包? 先确认你访问的是HTTP网站,不是HTTPS。HTTPS的流量是加密的,Wireshark看不到明文内容。
- 包太多卡死? 抓包前一定先配好过滤器。我曾经在没过滤的情况下抓了5分钟,生成了2GB的文件,电脑直接死机。
- 过滤器语法报错? 检查括号是否匹配,端口号前面有没有空格。BPF语法对空格敏感。
- 看不到应用层数据? 检查Wireshark的协议解析是否开启。有时候需要手动启用HTTP解析。
重要提醒:不要在公司网络里随意抓包,尤其是抓别人的流量。抓包工具能看到明文密码、Cookie等敏感信息。我见过有人因为抓包被HR约谈的。只抓自己的流量,或者在自己的实验环境里操作。