Wireshark CLI | 过滤包含特定字符串的流

问题背景

源自于和朋友的一次技术讨论,关于 Wireshark 如何查找特定字符串所在的 TCP 流,原始问题如下:

cli.jpg

仔细琢磨了下,基于我对 Wireshark 的使用经验,感觉一步到位实现比较困难,所以想着说用 Wireshark CLI 工具 Tshark 来实现试试。

当然实际上我对 CLI 工具用得也不是很多,并不太熟悉,这也是 Wireshark CLI 这个系列也很少单独更新的缘故,用得少,自然也想不到。😅

问题信息

分析原始图片上的问题,实际上原作者的需求如下:

  1. 第一步需求,查找包含特定 string 的 TCP 流,伪代码:tcp.stream contains "string"
  2. 第二步需求,实际上是要过滤掉上述包含特定 string 的 TCP 流,伪代码:(tcp.stream contains "string I do not want")

首先说到 TCP 流显示过滤语法,也就是 tcp.stream,日常使用的语法如下,但却并没有 contains 或者 matches 相关 。

tcp.stream
tcp.stream == 1
tcp.stream != 1
tcp.stream eq 1
not tcp.stream eq 1
tcp.stream in {0,1,2}
...

所以大概计划通过以下几步,进行处理:

  1. 首先查找包含特定 string 的数据包;
  2. 之后输出上述数据包所在的流;
  3. 最后过滤掉上述流,保留其他剩余的数据包。

问题分析

处理的第一步,额,得先造一个案例数据包文件 test.pcapng,信息如下:

image.png

string:
heartbeattcp.stream:
0 和 2过滤后需保留的数据包:
No.10 和 No.11
  1. 查找包含特定 string 的数据包

既然没有明确说明是在什么字段里,需要过滤什么 string,那么就简单通过 frame 来包含,-Y 参数来实现,得到 No.4 和 No.12 数据包。

frame contains "heartbeat"λ tshark -r test.pcapng -Y 'frame contains "heartbeat"'4 0.000002126  192.168.0.1 → 10.10.10.1   HTTP 1 222 1 275 POST /api/heartbeat.json?md5=144072c14a5282c76bd44bdd864fadccdmid =a67b54f37b7120c3983c4d6519b71e55&ver=1.0 HTTP/1.112 2.200002126  192.168.0.2 → 10.10.10.1   HTTP 1 222 1 275 POST /api/heartbeat.json?md5=144072c14a5282c76bd44bdd864fadccdmid =a67b54f37b7120c3983c4d6519b71e55&ver=1.0 HTTP/1.1
λ

当然这一步在 Wireshark 上也是可以做到的,和 tshark -Y 是同样的语法。

image.png

  1. 输出上述数据包所在的流

再次通过 tshark 输出所要的字段值,这里需要的是数据包所在 tcp.stream 的编号,-T 和 -e 参数组合来实现,得到 No.4 和 No.12 数据包所在的 TCP Stream 0 和 2。

λ tshark -r test.pcapng -Y 'frame contains "heartbeat"' -T fields -e tcp.stream
0                                                                              
2         
λ 考虑到关键字也可能出现在同一条流中的几个数据包中,会重复输出同一条流的编号,此处可以再加上 uniq 去重。
λ tshark -r test.pcapng -Y 'frame contains "heartbeat"' -T fields -e tcp.stream | uniq
0                                                                              
2         
λ 
  1. 过滤掉上述流,保留其他剩余的数据包

如果只是过滤掉上述流,过滤表达式比较简单,如下可以得到最终的结果 No.10 和 No.11 数据包。

!(tcp.stream==0) and !(tcp.stream==2)
!tcp.stream in {0,2}λ tshark -r test.pcapng -Y '!(tcp.stream==0) and !(tcp.stream==2)'10 0.100016618  192.168.0.1 → 192.10.3.1   TCP 1 1 0 58 [TCP Window Update] 0 → 0 [<None>] Seq=1 Win=65532 Len=011 0.200016618  192.168.0.1 → 192.168.0.255 UDP    46 0 → 0 [BAD UDP LENGTH 26 > IP PAYLOAD LENGTH] Len=18[Malformed Packet]
λ

image.png

但也是考虑到不同的案例数据包过滤出来的 TCP Stream 会有很多,再一个个去手写过滤条件会很麻烦,这也是最开始说通过 Wireshark 一步到位无法实现的原因,做是可以做,很不方便,确实没有 CLI 脚本工具来得快。

以下仍然通过 tshark ,首先通过 awk 构建出过滤掉上述流的显示过滤表达式。

awk '{printf("%s!(tcp.stream==%d)",sep,$1);sep=" and "}'λ tshark -r test.pcapng -Y 'frame contains "heartbeat"' -T fields -e tcp.stream | uniq | awk '{printf("%s!(tcp.stream==%d)",sep, $1);sep=" and "}'
!(tcp.stream==0) and !(tcp.stream==2)
λ 

再套用一次 tshark -Y + 上述得到的显示过滤表达式,结果如下:

λ tshark -r test.pcapng -Y '!(tcp.stream==0) and !(tcp.stream==2)'                                                                               10 0.100016618  192.168.0.1 → 192.10.3.1   TCP 1 1 0 58 [TCP Window Update] 0 → 0 [<None>] Seq=1 Win=65532 Len=0             11 0.200016618  192.168.0.1 → 192.168.0.255 UDP    46 0 → 0 [BAD UDP LENGTH 26 > IP PAYLOAD LENGTH] Len=18[Malformed Packet]                                                                                                                                                                                                                             
λ                     

最终命令如下:

tshark -r test.pcapng -Y "$(tshark -r test.pcapng -Y 'frame contains "heartbeat"' -T fields -e tcp.stream | uniq | awk '{printf("%s!(tcp.stream==%d)",sep,$1);sep=" and "}')"    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

旅游系列之:庐山美景

旅游系列之&#xff1a;庐山美景 一、路线二、住宿二、庐山美景 一、路线 庐山北门乘坐大巴上山&#xff0c;住在上山的酒店东线大巴游览三叠泉&#xff0c;不需要乘坐缆车&#xff0c;步行上下三叠泉即可&#xff0c;线路很短 二、住宿 长江宾馆庐山分部 二、庐山美景

Photoshop中图像编辑的基本操作

Photoshop中图像编辑的基本操作 Photoshop中调整图像窗口大小Photoshop中辅助工具的使用网格的使用标尺的使用注释工具的使用 Photoshop中置入嵌入式对象Photoshop中图像与画布的调整画布大小的修改画布的旋转图像尺寸的修改 Photoshop中撤销与还原采用快捷键进行撤销与还原采用…

机器学习之基于Jupyter多种混合模型的糖尿病预测

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着现代生活方式的改变&#xff0c;糖尿病的患病率在全球范围内呈现上升趋势。糖尿病是一种慢性代谢…

上位机图像处理和嵌入式模块部署(树莓派4b使用lua)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 lua是一个脚本语言&#xff0c;比c语言开发容易&#xff0c;也没有python那么重&#xff0c;整体使用还是非常方便的。一般当成胶水语言进行开发&a…

【Hadoop】--基于hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表[17]

目录 一、需求分析 1、背景介绍 2、目标 3、需求 4、数据内容 5、建库建表 二、ETL数据清洗 1、数据问题 2、需求 3、实现 4、扩展概念&#xff1a;ETL 三、指标计算 1、指标1&#xff1a;统计今日消息总量 2、指标2&#xff1a;统计每小时消息量、发送量和接收用…

哥白尼高程Copernicus DEM下载(CSDN_20240505)

哥白尼数字高程模型(Copernicus DEM, COP-DEM)由欧洲航天局(European Space Agency, 简称ESA或欧空局)发布&#xff0c;全球范围免费提供30米和90米分辨率DEM。COP-DEM是数字表面模型(DSM)&#xff0c;它表示地球表面(包括建筑物、基础设施和植被)的高程。COP-DEM是经过编辑的D…

循环神经网络模块介绍(Pytorch 12)

到目前为止&#xff0c;我们遇到过两种类型的数据&#xff1a;表格数据和图像数据。对于图像数据&#xff0c;我们设计了专门的卷积神经网络架构(cnn)来为这类特殊的数据结构建模。换句话说&#xff0c;如果我们拥有一张图像&#xff0c;我们 需要有效地利用其像素位置&#xf…

算法课程笔记——蓝桥云课第六次直播

&#xff08;只有一个数&#xff0c;或者因子只有一个&#xff09;先自己打表&#xff0c;找找规律函数就是2的n次方 异或前缀和 相等就抵消 先前缀和再二分

【Python】机器学习之Sklearn基础教程大纲

机器学习之Sklearn基础教程大纲 1. 引言 机器学习简介Scikit-learn&#xff08;Sklearn&#xff09;库介绍安装和配置Sklearn 2. 数据预处理 2.1 数据加载与查看 - 加载CSV、Excel等格式的数据- 查看数据的基本信息&#xff08;如形状、数据类型等&#xff09;2.2 数据清洗…

本地部署大模型ollama+docker+open WebUI/Lobe Chat

文章目录 大模型工具Ollama下载安装运行Spring Ai 代码测试加依赖配置写代码 ollama的web&Desktop搭建部署Open WebUI有两种方式Docker DesktopDocker部署Open WebUIDocker部署Lobe Chat可以配置OpenAI的key也可以配置ollama 大模型的选择 本篇基于windows环境下配置 大模型…

翔云优配恒生指数涨1.85%、恒生科技指数涨3.74% 小鹏汽车涨超8%

5月3日港股开盘&#xff0c;恒生指数涨1.85%&#xff0c;报18543.3点&#xff0c;恒生科技指数涨3.74%&#xff0c;报4009.96点&#xff0c;国企指数涨2.23%&#xff0c;报6580.81点&#xff0c; 翔云优配是一家领先的在线投资平台,提供全球范围内的股票、期货、基金等交易服务…

小程序引入 Vant Weapp 极简教程

一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行&#xff08;winr&#xff0c;输入cmd&#xff09;输入 node -v若显示版本信息&#xff0c;即为安装成功 2. 在 小程序根目录 命令行/终端…

C++类的小结

1、类定义 使用class关键字定义类。 类名通常以大写字母开头&#xff0c;以符合命名规范。 类包含成员变量&#xff08;也称为属性或数据成员&#xff09;和成员函数&#xff08;也称为方法或行为&#xff09;。 class MyClass { public: int x; // 数据成员 void setX…

【Gateway远程开发】0.5GB of free space is necessary to run the IDE.

【Gateway远程开发】0.5GB of free space is necessary to run the IDE. 报错 0.5GB of free space is necessary to run the IDE. Make sure that there’s enough space in following paths: /root/.cache/JetBrains /root/.config/JetBrains 原因 下面两个路径的空间不…

【OpenNJet下一代云原生之旅】

OpenNJet下一代云原生之旅 1、OpenNJet的定义OpenNJet架构图 2、OpenNJet的特点性能无损动态配置灵活的CoPilot框架支持HTTP/3支持国密企业级应用高效安全 3、OpenNJet的功能特性4、OpenNJet的安装使用编译安装配置yum源创建符号连接修改配置编译 5、通过 OpenNJet 部署 WEB SE…

基于OpenCv的图像特征点检测

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

【设计模式】函数式编程范式工厂模式(Factory Method Pattern)

目录标题 定义函数式接口函数式接口实现类工厂类封装实际应用总结 定义函数式接口 ISellIPad.java /*** 定义一个函数式接口* param <T>*/ FunctionalInterface public interface ISellIPad<T> {T getSellIPadInfo();}函数式接口实现类 HuaWeiSellIPad.java pu…

rust数据类型转换,as和TryInto使用

Rust 是类型安全的语言&#xff0c;因此在 Rust 中做类型转换不是一件简单的事&#xff0c;这一章节我们将对 Rust 中的类型转换进行详尽讲解。 as转换 先来看一段代码&#xff1a; fn main() {let a: i32 10;let b: u16 100;if a < b {println!("Ten is less tha…

无U盘基于本地硬盘无损制作虚拟U盘(Windows、Linux系统安装启动盘)

知识点 实验环境 名称版本使用平台Win11本地硬盘格式GPT待安装镜像deepin-desktop-community-20.9-amd64.iso 文中工具下载链接&#xff1a; https://download.csdn.net/download/xzzteach/89263714 deepin-desktop-community-20.9-amd64.iso 文件结构如下&#xff1a; 在Li…

多功能在线二维码生成源码

上传即可使用&#xff0c;可以把电子名片、文本、wifi网络、电子邮件、短信、电话号码、网址等信息生成对应的二维码图片。 多功能在线二维码生成源码