工具介绍《WireShark》
Wireshark 过滤命令中符号含义详解
一、比较运算符
Wireshark 支持两种比较运算符语法:英文缩写(如 eq)和 C语言风格符号(如 ==),两者功能等价。
| 符号(英文缩写) | C语言风格符号 | 含义 | 示例 |
|---|---|---|---|
eq | == | 等于 | ip.src == 192.168.1.1 |
ne | != | 不等于 | tcp.port != 80 |
gt | > | 大于 | frame.len > 1000 |
lt | < | 小于 | udp.length < 50 |
ge | >= | 大于等于 | tcp.window_size >= 8192 |
le | <= | 小于等于 | ip.len <= 1500 |
注意:
- 等于判断:
ip.addr eq 192.168.1.1与ip.addr == 192.168.1.1完全等价。 - 不等于判断:
!=或ne均可,但需注意部分场景需用not组合(如not tcp.port == 80)。
二、逻辑运算符
用于组合多个过滤条件,支持 英文缩写(如 and)和 C语言风格符号(如 &&)。
| 符号(英文缩写) | C语言风格符号 | 含义 | 示例 |
|---|---|---|---|
and | && | 逻辑与(同时满足) | ip.src == 192.168.1.1 && tcp.port == 80 |
or | || | 逻辑或(满足其一) | http.request.method == "GET" || http.request.method == "POST" |
not | ! | 逻辑非(排除条件) | !icmp(排除所有 ICMP 包) |
注意:
- 优先级:
not>and>or,建议用括号明确优先级(如(a and b) or c)。 - 组合过滤:可联合使用比较和逻辑运算符,例如
ip.addr == 10.1.1.1 and (tcp.port == 80 or udp.port == 53)。
三、特殊符号与高级操作
-
contains与matchescontains:检查字段是否包含指定字符串(大小写敏感)http contains "password" # 过滤 HTTP 报文含 "password" 的包matches:支持正则表达式匹配(需用~符号)http.request.uri matches ".*\.php$" # 匹配 URI 以 .php 结尾的请求
-
[]偏移量操作
用于从协议头或载荷中提取特定字节:tcp[20:4]:从 TCP 头的第 20 字节开始截取 4 个字节。udp[8:3]==20:21:22:检查 UDP 载荷第 8 字节开始的 3 个字节是否为0x20 0x21 0x22。
-
按位运算符
<<和>>
用于处理协议头中的位移计算(常见于捕获过滤器):tcp[((tcp[12] & 0xf0) >> 2):4] == 0x47455420 # 匹配 TCP 载荷中的 "GET " 请求>>:右移(除以 2 的幂次),如(tcp[12] & 0xf0) >> 2计算 TCP 头长度。<<:左移(乘以 2 的幂次),如(ip[0] & 0xf) << 2计算 IPv4 头长度。
四、实际应用示例
-
组合逻辑过滤
ip.addr == 192.168.1.1 and (tcp.port == 80 or udp.port == 53) and !http- 含义:过滤源或目的 IP 为
192.168.1.1,且端口为 80(TCP)或 53(UDP),但排除 HTTP 协议。
- 含义:过滤源或目的 IP 为
-
复杂协议分析
tcp.flags.syn == 1 and tcp.flags.ack == 0 # 匹配 TCP SYN 包(不含 ACK)- 用途:检测异常连接请求。
-
内容提取与隐写检测
icmp and icmp[8:1] == 0x66 # 检查 ICMP 数据段第 8 字节是否为 0x66(ASCII 'f')- 用途:分析 ICMP 协议中的隐写数据。
一、基础操作流程
-
数据包筛选与过滤
- 协议筛选:直接输入协议名称(如
http、tcp、icmp)过滤特定协议流量,排除无关干扰。 - IP/端口定位:
- 源IP:
ip.src == 192.168.1.1 - 目标端口:
tcp.dstport == 80 - MAC地址:
eth.addr == A0:00:00:04:C5:84
- 源IP:
- 内容搜索:按
Ctrl+F搜索关键字,支持字符串、十六进制和正则表达式,常用于快速定位flag。
- 协议筛选:直接输入协议名称(如
-
数据包还原技术
- 追踪流(Follow Stream):右键数据包选择追踪TCP/UDP/HTTP流,可还原完整的会话内容,常用于提取HTTP上传文件、SQL注入语句等。
- 文件导出:通过
文件 -> 导出对象 -> HTTP批量提取传输的文件(如压缩包、图片),或手动从data层导出字节流。
-
协议层级分析
- 分层解析:逐层展开数据包的物理层、传输层(TCP/UDP)、应用层(HTTP/FTP)信息,分析异常字段(如TCP标志位异常、HTTP请求参数含可疑代码)。
二、CTF常见题型与解法
1. HTTP协议相关
- 文件上传/下载:
- 通过HTTP过滤器定位
POST请求,追踪流查看上传内容;导出对象提取隐藏文件(如flag.rar)。 - 分段传输:若文件分多包传输,需用
dd命令合并并去除冗余头信息。
- 通过HTTP过滤器定位
- Web渗透痕迹:
- 筛选
http.request.uri contains "upload.php",分析SQL注入或命令执行流量,提取攻击载荷。
- 筛选
2. ICMP协议隐写
- Ping报文隐写:检查ICMP数据段,可能直接包含ASCII字符或通过脚本提取隐藏信息(如每包1字节组合成flag)。
- 示例脚本:
import pyshark cap = pyshark.FileCapture('icmp.pcap') for pkt in cap:print(chr(int(pkt.icmp.data, 16)), end='')
3. USB流量分析
- 键盘流量:
- 使用tshark提取数据:
tshark -r usb.pcap -T fields -e usb.capdata > usbdata.txt - 过滤有效击键(HID Usage ID),通过映射表转换键位(如
0x04对应"A")。
- 使用tshark提取数据:
- 鼠标流量:解析移动坐标(
X/Y偏移量),绘制轨迹图还原操作。
4. 加密流量解密
- SSL/TLS解密:需预置服务器私钥或
SSLKEYLOGFILE,在Wireshark中配置密钥解密HTTPS流量,查找敏感数据。 - Webshell流量(如蚁剑):
- 识别Base64编码的PHP代码,通过URL解码和流量统计定位后门交互。
三、高级技巧与工具联动
-
协议统计与排序
- 使用
统计 -> 协议分级快速发现异常协议(如非常见端口HTTP或异常DNS隧道)。 - I/O图表:分析流量时间分布,定位爆破攻击(如高频SSH登录尝试)。
- 使用
-
联合工具分析
- Tshark命令行:批量提取字段(如
tshark -r file.pcap -Y 'http' -T json导出JSON格式)。 - Foremost/Binwalk:自动分离流量中的嵌入文件(如图片碎片、PDF)。
- Tshark命令行:批量提取字段(如
-
无线流量处理
- WiFi密码破解:捕获WPA握手包,用Aircrack-ng配合字典破解,需过滤
eapol协议。
- WiFi密码破解:捕获WPA握手包,用Aircrack-ng配合字典破解,需过滤
四、实战案例分析
- 案例a:键盘流量还原密码
通过USB协议过滤,提取击键数据并映射,得到6位数字密码flag{720093}。 - 案例b:HTTP文件分片重组
合并5个分片包,去除364字节头部后合成fly.rar,解压得flag。 - 案例c:蚁剑后门分析
追踪info1.php流量,解密Base64载荷获取Webshell密码及下载的恶意文件。
实战案例1:HTTP流量中隐藏的压缩包文件
题目背景
给定一个名为web_traffic.pcap的流量包,分析并找到隐藏的Flag文件。
分析过程
-
初步筛选HTTP流量
- 在Wireshark过滤栏输入
http,筛选所有HTTP协议流量,排除无关数据。 - 观察HTTP请求方法(GET/POST),重点关注
POST请求(可能用于文件上传)。
- 在Wireshark过滤栏输入
-
追踪TCP流还原完整会话
- 右键任意HTTP数据包 →
追踪流→TCP流,查看完整HTTP会话内容。 - 发现关键信息:
(示例:POST请求上传了名为secret.zip的文件)POST /upload.php HTTP/1.1 ...(请求头)... Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABCDEFG------WebKitFormBoundaryABCDEFG Content-Disposition: form-data; name="file"; filename="secret.zip" Content-Type: application/zipPK...(ZIP文件头标志)...
- 右键任意HTTP数据包 →
-
导出隐藏的ZIP文件
- 点击菜单栏
文件→导出对象→HTTP,打开导出对话框。 - 在列表中找到
secret.zip的传输记录(文件名和大小匹配),点击Save导出文件。
- 点击菜单栏
-
解决文件损坏问题
- 若导出的ZIP无法解压,可能因流量包截断或分片传输导致文件头缺失。
- 手动修复:
- 使用十六进制编辑器(如010 Editor)在文件头部添加ZIP文件头标志
50 4B 03 04(对应ASCII为PK..)。 - 若文件分片传输,需合并多个数据包的
data字段内容(通过tcp.stream eq <流编号>筛选同一流的分片)。
- 使用十六进制编辑器(如010 Editor)在文件头部添加ZIP文件头标志
-
解压获取Flag
- 修复后的
secret.zip解压得到flag.txt,内容为:
flag{http_file_upload_928374}
- 修复后的
实战案例2:ICMP协议中的Flag隐写
题目背景
在icmp.pcapng流量包中,Flag通过ICMP报文的数据段隐写传输。
分析过程
-
筛选ICMP流量
- 输入过滤器
icmp,仅显示ICMP协议报文。 - 观察
Echo request(Ping请求)报文,数据段(Data)可能包含隐写信息。
- 输入过滤器
-
提取数据段内容
- 展开ICMP报文 →
Data字段,发现数据段为十六进制值,例如:
Data: 66 6c 61 67 7b 69 63 6d 70 5f 73 74 65 67 6f 7d - 手动转换:将十六进制转换为ASCII:
bytes = [0x66, 0x6c, 0x61, 0x67, 0x7b, 0x69, 0x63, 0x6d, 0x70, 0x5f, 0x73, 0x74, 0x65, 0x67, 0x6f, 0x7d] print(''.join([chr(b) for b in bytes])) # 输出:flag{icmp_stego}
- 展开ICMP报文 →
-
自动化提取脚本
- 若Flag分散在多个ICMP包中(如每包1字节),编写Python脚本批量提取:
import pysharkcap = pyshark.FileCapture('icmp.pcap', display_filter='icmp') flag = '' for pkt in cap:if hasattr(pkt.icmp, 'data'):hex_data = pkt.icmp.data.replace(':', '')flag += bytes.fromhex(hex_data).decode('latin-1') print(flag) # 输出:flag{icmp_stego_123}
- 若Flag分散在多个ICMP包中(如每包1字节),编写Python脚本批量提取:
实战案例3:USB键盘流量还原密码
题目背景
流量包usb_keyboard.pcap记录了USB键盘输入,需还原输入的6位数字密码。
分析过程
-
筛选USB键盘流量
- 输入过滤器
usb.transfer_type == 0x01 && usb.dst == "host",筛选键盘输入事件。
- 输入过滤器
-
提取击键数据
- 使用tshark命令行提取
usb.capdata字段:tshark -r usb_keyboard.pcap -T fields -e usb.capdata > keystrokes.txt - 输出示例(每行对应一次击键):
00:00:04:00:00:00:00:00
00:00:05:00:00:00:00:00
- 使用tshark命令行提取
-
映射HID Usage ID到字符
- 提取第三字节(如
04对应字母a,05对应b)。 - HID键位表(部分):
0x04: a, 0x05: b, 0x06: c, ..., 0x1d: 0, 0x1e: 1, ..., 0x27: 9 - 脚本转换:
hid_map = {0x04: 'a', 0x05: 'b', 0x06: 'c', 0x07: 'd', 0x08: 'e',0x09: 'f', 0x0a: 'g', 0x1d: '0', 0x1e: '1', 0x1f: '2', 0x20: '3', 0x21: '4', 0x22: '5', 0x23: '6', 0x24: '7',0x25: '8', 0x26: '9' }with open('keystrokes.txt') as f:for line in f:if line.strip() == '00:00:00:00:00:00:00:00':continue # 跳过无效数据key_code = int(line.split(':')[2], 16)print(hid_map.get(key_code, ''), end='') # 输出:flag{720931}
- 提取第三字节(如
总结与技巧
- 快速定位关键点:
- HTTP文件传输 → 过滤
http并检查POST请求。 - 隐写数据 → 检查协议数据段的十六进制/ASCII内容。
- HTTP文件传输 → 过滤
- 工具联动:
- 使用
tshark批量提取字段,pyshark自动化分析。
- 使用
- 数据修复:
- 文件头修复、分片重组、字符映射是常见解题关键。
相关文章:
工具介绍《WireShark》
Wireshark 过滤命令中符号含义详解 一、比较运算符 Wireshark 支持两种比较运算符语法:英文缩写(如 eq)和 C语言风格符号(如 ),两者功能等价。 符号(英文缩写)C语言风格符号含义示…...
Redis中的数据类型与适用场景
目录 前言1. 字符串 (String)1.1 特点1.2 适用场景 2. 哈希 (Hash)2.1 特点2.2 适用场景 3. 列表 (List)3.1 特点3.2 适用场景 4. 集合 (Set)4.1 特点4.2 适用场景 5. 有序集合 (Sorted Set)5.1 特点5.2 适用场景 6. Redis 数据类型的选型建议结语 前言 Redis 作为一款高性能的…...
gz sim机器人SDF模型 [持续更新]
机器人SDF模型 linklink的一级pose材质 plugin话题信息通信键盘操作plugin Sensor传感器imu 不算教学,个人的记录 sdf的格式跟urdf有所不同,必须是完整的一个包括,比如< pose></ pose>这样前一个后一个,urdf中是有<…...
【Qt】Ubuntu22.04使用命令安装Qt5和Qt6
1、安装Qt5 注意:Ubuntu22.04已经没有 qt5-default ,因此不能一键安装啦 1)安装核心组件 sudo apt install qtbase5-dev qtchooser qt5-qmake qtcreator2)安装QtCreator sudo apt install qtcreator3)安装工具包、Qt Quick 开发的核心库(qtdeclarative5-dev) sudo a…...
Pytest的Fixture使用
概述 Pytest中的Fixture可以使得测试代码高度复用,同时对资源进行安全的管理,以及在复杂的测试场景用进行灵活的组合。 概念 Fixture:可重用的函数,用@pytest.fixture来进行装饰,用于为测试提供数据、环境或者服务作用域:控制Fixture的生命周期,默认是function,可设置…...
【MySQL | 六、索引特性(进一步理解)】
目录 索引的理解索引的作用MySQL与磁盘的IOPage单个Page的分类多个Page的组织B树的特点 B树和B树的区别聚簇索引 VS 非聚簇索引聚簇索引的优缺点非聚簇索引的优缺点 创建索引常见索引分为:主键索引InnoDB主键索引的生成过程(1)初始化…...
计算机网络高频(三)UDP基础
计算机网络高频(三)UDP基础 1.UDP的头部格式是什么样的?⭐ UDP 头部具有以下字段: 源端口(Source Port):16 位字段,表示发送方的端口号。目标端口(Destination Port):16 位字段,表示接收方的端口号。长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部…...
【测试开发】OKR 小程序端黑盒测试报告
【测试报告】OKR 小程序端 项目名称版本号测试负责人测试完成日期联系方式OKR 小程序端4.0马铭胜2025-03-2515362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中,个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而,如何设定…...
HTTP 1.0和2.0 有什么区别?
HTTP 1.0和HTTP 2.0是互联网中用于数据传输的重要协议,两者在功能和性能上有显著差异。 以下是它们的主要区别: HTTP 1.0 的特点: 单一连接:每个请求需要独立连接,导致高延迟和资源浪费。文本传输:使用文…...
部署高可用PostgreSQL14集群
目录 基础依赖包安装 consul配置 patroni配置 vip-manager配置 pgbouncer配置 haproxy配置 验证 本文将介绍如何使用Patroni、Consul、vip-manager、Pgbouncer、HaProxy组件来部署一个3节点的高可用、高吞吐、负载均衡的PostgresSQL集群(14版本)&…...
JavaScript 对事件的反应机制
JavaScript 对事件的反应机制 JavaScript 对事件的反应机制是网页实现用户交互的核心,主要通过事件监听与处理函数实现对用户行为的响应。以下是关键要点解析: 一、事件机制基础 1. 事件的定义 事件是用户或浏览器在页面上的动作(如点击、…...
Vue3中keep-alive缓存组件应用场景。
文章目录 一、KeepAlive是什么?二、基本使用1.例子2.keep-alive使用 三、其他属性3.1 包含/排除3.2 最大缓存实例数3.3 缓存实例的生命周期 总结 一、KeepAlive是什么? 是一个内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例…...
Pythonload JSON文件需要手动关闭吗?
在Python中使用 json 模块加载JSON文件时,通常不需要手动关闭文件。 例如,使用以下方式加载JSON文件: import json with open(data.json, r) as f: data json.load(f) 在上述代码中,使用 with 语句打开文件,它会在代码…...
SCI论文阅读指令(特征工程)
下面是一个SCI论文阅读特征工程V3.0,把指令输入大模型中,并上传PDF论文,就可以帮你快速阅读论文。 优先推荐kimi,当然DeepSeek、QwQ-32B等大语言模型也可以。测试了一下总结的还不错,很详细。 请仔细并深入地阅读所提…...
CosyVoice2在Windows系统上本地部署的详细步骤
CosyVoice2在Windows系统上本地部署的详细步骤: 下载源码并初始化: 确保你的设备上安装了Git。打开命令提示符(cmd),执行以下命令来克隆仓库:git clone --recursive https://github.com/FunAudioLLM/CosyVo…...
鸿蒙入门——ArkUI 跨页面数据同步和应用全局单例的UI状态存储AppStorage 小结(三)
文章大纲 引言一、AppStorage 应用全局的UI状态存储1、StorageProp和StorageLink装饰器建立联系2、StorageProp2.1、StorageProp使用规则2.2、StorageProp变量的传递/访问规则2.3、StorageProp支持的观察变化2.4、StorageProp 值初始化和更新 3、StorageLink3.1、StorageLink使…...
RabbitMQ 核心组件及功能详解
RabbitMQ 是一个开源的消息代理和队列服务器,其核心架构由以下关键组件构成: 一、核心组件架构 #mermaid-svg-mIHqbpvVt25Kpyl0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mIHqbpvVt25Kpyl0 .error-icon{fil…...
海思烧录工具HITool电视盒子刷机详解
HiTool是华为开发的一款用于海思芯片设备的刷机和调试工具,可对搭载海思芯片的机顶盒、智能电视等设备进行固件烧录、参数配置等操作。以下为你详细介绍: 功能用途 固件烧录:这是HiTool最主要的功能之一。它能够将下载好的适配固件文件烧录到…...
探秘 C++ 双星系统模型:实现快速值切换
在软件开发的世界里,有时我们会遇到需要频繁在两个值之间进行切换的场景。为了高效地处理这类情况,我们可以设计一个专门的类来实现这个功能。今天,我们就来详细介绍一个用 C 实现的双星系统模型类 Turner,它能够帮助我们轻松地在…...
AI 生成内容(AIGC):从文本到视频的完整流程
近年来,AI 生成内容(AIGC, AI-Generated Content) 迅速发展,从文本、图片到音频、视频,AI 在创意内容生成方面展现出了惊人的能力。AIGC 不仅提升了内容创作效率,还降低了成本,使得普通用户也能…...
使用VS2022编译CEF
前提 选择编译的版本 CEF自动编译,在这里可以看到最新的稳定版和Beta版。 从这里得出,最新的稳定版是134.0.6998.118,对应的cef branch是6998。通过这个信息可以在Build requirements查到相关的软件配置信息。 这里主要看Windows下的编译要…...
WebMvcConfigurer 的 addResourceLocations
在 Spring Boot 的 addResourceLocations 方法中,file: 是一个 URL 前缀,用于指示资源的位置是本地文件系统路径。以下是详细解释: 一、file: 的作用 file: 是 Java 中用于表示本地文件系统的 URL 前缀。它告诉 Spring Boot,资源…...
Pytorch学习笔记(八)Learn the Basics - Save and Load the Model
这篇博客瞄准的是 pytorch 官方教程中 Learn the Basics 章节的 Save and Load the Model 部分。 官网链接:https://pytorch.org/tutorials/beginner/basics/saveloadrun_tutorial.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwdaa2m …...
正则表达式基本语法和Java中的简单使用
先来个例子 public static final Pattern CHINESE_PATTERN Pattern.compile("[\\u4e00-\\u9fa5]"); / 检测字符串是否包含汉字 String text "Hello 世界"; boolean hasChinese CHINESE_PATTERN.matcher(text).find(); // 返回 true// 提取所有汉字 Mat…...
Mysql 回表查询,什么是回表查询,如何拒绝sql查询时的回表问题
文章目录 1. 什么是回表(回表查询)2. 如何减少回表3. 使用案例3.1 问题分析3.2 避免回表查询3.3 开始优化前言: 在继续讲解专栏内容之前,先学习几个概念,以便更好了解: 什么是聚簇索引什么是回表查询这篇文章详细分析 回表查询。聚簇索引的理解可以进入这篇文章:什么是聚…...
Spring Boot响应压缩配置与优化
一、核心工作机制 1.1 自动协商触发条件 Spring Boot的响应压缩功能基于智能协商机制,需同时满足以下条件方可触发: 客户端支持:请求头包含Accept-Encoding: gzip/deflate数据量阈值:响应体大小超过预设值(默认2KB&…...
常考计算机操作系统面试习题(三上)
目录 1. 为何要引入与设备的无关性?如何实现设备的独立性? 2. 页面置换先进先出算法 3. 页面置换先进先出算法,4个页框 4. 进程优先级调度算法 5. 短作业优先调度策略 6. 平均内存访问时间计算 7. 页式存储和段式存储的物理地址计算 …...
MATLAB 绘制空间分布图 方法总结
方法一:用mapshow函数 figure(1); hold on %% 添加陆地 land shaperead(landareas); mapshow(landareas.shp, FaceColor, [1 1 1], EdgeColor, [0.3 0.3 0.3],FaceAlpha,0)%% 添加站点 for i 1:size(mycmap,1)mapshow(lon(label i),lat(label i),displaytype,po…...
Maven工具学习使用(三)——坐标和依赖
坐标元素 Maven坐标是通过一些元素定义的,元素包括groupId、artifactId、version、packaging、classifier groupId:定义当前Maven项目隶属的实际项目。Maven项目和实际项目不是一对一的关系。一个实际的项目对应的Maven模块可能会有很多,比如SpringFramework。groupId不应…...
命令模式(Command Pattern)★
命令模式(Command Pattern) 如果任务有多个复杂的操作,可以使用命令模式将任务的操作封装为命令对象。这些命令对象可以在需要时按顺序执行,方便管理任务执行的逻辑和回滚操作。 示例: class Command { public:virtu…...
