CTF 流量分析- Wireshark 核心教程:从网卡抓包到 2025 - CTF 流量分析题目技巧

AI-摘要
28.7Blog GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
CTF 流量分析- Wireshark 核心教程:从网卡抓包到 2025 - CTF 流量分析题目技巧
28.7的博客Wireshark 基础操作与流量筛选指南
本文梳理了Wireshark的核心操作流程,从网卡选择、数据保存到多场景流量筛选,结合实操步骤与示例,帮助快速定位目标网络数据包。
一、基础操作流程
1. 选择网卡并开始抓包
- 打开Wireshark后,界面会列出所有可用网卡,包括VM虚拟网卡、LAN、WLAN等。
- 找到需要监控的网卡(如本次选择“WLAN”),双击即可进入该网卡的实时流量抓包页面。
- 点击界面顶部红色按钮可随时停止抓包(红框标注为停止按钮)。
2. 保存抓包数据
- 抓包完成后,点击界面右上角的「文件」菜单。
- 在下拉菜单中选择「保存」,自定义文件名和保存路径,即可存储完整的抓包数据(默认格式为
.pcapng)。
二、核心流量筛选方法
Wireshark筛选分为捕获过滤(抓包前限制范围,语法严格)和显示过滤(抓包后筛选数据,灵活度高),以下按场景分类说明。
1. 按协议筛选
直接输入协议名称,快速定位特定协议流量,适用于HTTP、TCP、DNS等常见协议。
| 筛选类型 | 语法示例 | 说明 |
|---|---|---|
| 显示过滤 | http/tcp/dns |
单独显示HTTP、TCP或DNS协议的数据包 |
| 捕获过滤 | tcp/not arp |
仅捕获TCP包,或排除ARP协议的数据包 |
2. 按IP地址筛选
按源IP、目的IP或网段筛选,精准定位特定设备的流量。
| 筛选类型 | 语法示例 | 说明 |
|---|---|---|
| 显示过滤 | ip.src == 192.168.1.1 |
仅显示“源IP为192.168.1.1”的数据包 |
| 显示过滤 | ip.addr == 10.0.0.0/24 |
显示“源或目的IP在10.0.0.0/24网段”的数据包 |
| 捕获过滤 | src host 192.168.1.1 |
仅捕获“源IP为192.168.1.1”的数据包 |
3. 按端口筛选
针对数据库、Web服务等固定端口的应用,快速定位其流量(如MySQL 3306、MongoDB 27017)。
| 筛选类型 | 语法示例 | 说明 |
|---|---|---|
| 显示过滤 | tcp.port == 3306 |
显示MySQL(默认3306端口)的TCP流量 |
| 显示过滤 | udp.portrange 50000-50010 |
显示UDP协议50000-50010端口范围的流量 |
| 捕获过滤 | tcp portrange 9501-9505 |
仅捕获TCP协议9501-9505端口范围的数据包 |
实操示例:数据库流量筛选
- MySQL筛选:在过滤栏输入
tcp.port == 3306,选中任意请求后右键选择“追踪流”,可查看完整通信过程。 - MongoDB筛选:输入
tcp.port == 27017,直接定位MongoDB默认端口的流量。
4. 进阶筛选(协议字段/内容/时间)
(1)协议字段筛选
深入协议内部字段,定位特定请求或状态(如HTTP POST、TCP重传)。
- HTTP:
http.request.method == "POST"(筛选POST请求)、http.response.code == 404(定位404错误) - TCP:
tcp.flags.syn == 1(检测TCP三次握手的SYN包)、tcp.analysis.retransmission(查看重传报文) - DNS:
dns.qry.name contains "baidu.com"(查找查询“baidu.com”的DNS包)
(2)数据内容筛选
搜索数据包中的特定字符串或十六进制内容。
tcp contains "flag"(TCP包中包含“flag”字符串)data.data contains 0A:0B:0C:0D(数据域包含十六进制字节“0A 0B 0C 0D”)- 正则匹配:
http.request.uri matches "login\?user=.*"(匹配“login?user=”开头的URL)
(3)时间筛选
按时间范围或间隔筛选数据包。
frame.time >= "2025-10-01 00:00:00"(2025年10月1日后的数据包)tcp.time_delta > 0.5(相邻TCP包时间间隔超过0.5秒,排查慢请求)
5. 逻辑组合筛选
使用逻辑运算符组合多个条件,缩小筛选范围(括号可调整优先级)。
- 逻辑与(&&):
(tcp.port == 80 || tcp.port == 443) && ip.src == 183.225.235.138(源IP为183.225.235.138的HTTP/HTTPS流量) - 逻辑或(||):
http || dns(显示HTTP或DNS流量) - 逻辑非(!):
!arp(排除ARP协议流量)
三、捕获过滤与显示过滤的区别
| 特性 | 捕获过滤 | 显示过滤 |
|---|---|---|
| 作用时机 | 抓包前(限制捕获范围) | 抓包后(筛选已捕获数据) |
| 语法规则 | BPF语法(严格,不支持复杂字段) | Wireshark自定义语法(灵活) |
| 性能影响 | 减少数据量,提升抓包性能 | 不影响原始数据,仅控制显示 |
| 典型示例 | tcp port 80 and not src host 192.168.1.1 |
http.request.method == "POST" && tcp.srcport > 10000 |
四、工具辅助与快捷键
- 表达式生成器:点击过滤栏右侧的「Expression」按钮,通过可视化界面选择协议、字段和运算符,自动生成筛选语法(适合新手)。
- 常用快捷键:
Ctrl+F:快速搜索数据包内容(支持字符串/十六进制)Shift+F:打开高级过滤界面,分步构建复杂表达式- 停止/开始抓包:
Ctrl+E
五、典型场景实操示例
- 排查HTTP慢请求:
http.request && tcp.time_delta > 2(筛选响应时间超过2秒的HTTP请求) - 检测恶意DNS请求:
dns.qry.name matches "malware|phish"(查找包含“malware”或“phish”的DNS查询) - 提取敏感SQL语句:
mysql contains "SELECT * FROM users"(定位MySQL中查询用户表的数据包) - 分析TCP连接异常:
tcp.flags.reset == 1 || tcp.analysis.ack_lost_segment(检测TCP RST包或ACK丢失的分段)
补充说明
大多数流量分析操作难度较低,通过筛选关键字符串(如“flag”)即可快速定位目标数据包。
5.1 CTF比赛日志分析示例
(1)CTFhub-MySQL流量分析
(2)CTFhub-MongoDB流量分析
(3)2025网信办CTF流量分析
要不要我帮你整理一份Wireshark筛选语法速查表?包含文中所有核心筛选规则、语法示例和对应场景,方便你日常实操时快速查阅。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果









