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

Wireshark 基础操作与流量筛选指南

本文梳理了Wireshark的核心操作流程,从网卡选择、数据保存到多场景流量筛选,结合实操步骤与示例,帮助快速定位目标网络数据包。

一、基础操作流程

1. 选择网卡并开始抓包

  1. 打开Wireshark后,界面会列出所有可用网卡,包括VM虚拟网卡、LAN、WLAN等。
  2. 找到需要监控的网卡(如本次选择“WLAN”),双击即可进入该网卡的实时流量抓包页面。
  3. 点击界面顶部红色按钮可随时停止抓包(红框标注为停止按钮)。

选择WLAN网卡
红色停止抓包按钮

2. 保存抓包数据

  1. 抓包完成后,点击界面右上角的「文件」菜单。
  2. 在下拉菜单中选择「保存」,自定义文件名和保存路径,即可存储完整的抓包数据(默认格式为.pcapng)。

文件保存路径选择

二、核心流量筛选方法

Wireshark筛选分为捕获过滤(抓包前限制范围,语法严格)和显示过滤(抓包后筛选数据,灵活度高),以下按场景分类说明。

1. 按协议筛选

直接输入协议名称,快速定位特定协议流量,适用于HTTP、TCP、DNS等常见协议。

筛选类型 语法示例 说明
显示过滤 http/tcp/dns 单独显示HTTP、TCP或DNS协议的数据包
捕获过滤 tcp/not arp 仅捕获TCP包,或排除ARP协议的数据包

协议过滤示例(HTTP)

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”的数据包

IP地址过滤示例

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,选中任意请求后右键选择“追踪流”,可查看完整通信过程。
    MySQL端口筛选
    追踪MySQL流
  • MongoDB筛选:输入 tcp.port == 27017,直接定位MongoDB默认端口的流量。
    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

四、工具辅助与快捷键

  1. 表达式生成器:点击过滤栏右侧的「Expression」按钮,通过可视化界面选择协议、字段和运算符,自动生成筛选语法(适合新手)。
  2. 常用快捷键:
    • Ctrl+F:快速搜索数据包内容(支持字符串/十六进制)
    • Shift+F:打开高级过滤界面,分步构建复杂表达式
    • 停止/开始抓包:Ctrl+E

五、典型场景实操示例

  1. 排查HTTP慢请求http.request && tcp.time_delta > 2(筛选响应时间超过2秒的HTTP请求)
  2. 检测恶意DNS请求dns.qry.name matches "malware|phish"(查找包含“malware”或“phish”的DNS查询)
  3. 提取敏感SQL语句mysql contains "SELECT * FROM users"(定位MySQL中查询用户表的数据包)
  4. 分析TCP连接异常tcp.flags.reset == 1 || tcp.analysis.ack_lost_segment(检测TCP RST包或ACK丢失的分段)

补充说明

大多数流量分析操作难度较低,通过筛选关键字符串(如“flag”)即可快速定位目标数据包。

流量筛选定位flag示例1
流量筛选定位flag示例2

5.1 CTF比赛日志分析示例

(1)CTFhub-MySQL流量分析

CTFhub-MySQL流量分析

(2)CTFhub-MongoDB流量分析

CTFhub-MongoDB流量分析

(3)2025网信办CTF流量分析

2025网信办CTF流量分析

要不要我帮你整理一份Wireshark筛选语法速查表?包含文中所有核心筛选规则、语法示例和对应场景,方便你日常实操时快速查阅。