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:
heartbeat

tcp.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.1
   12 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=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]
λ

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.mfbz.cn/a/594770.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】解决不同场景字符串问题:巧妙运用字符串函数

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、字符函数1.1 字符分类函数1.1.1 islower1.1.2 isupper 1.…

Android中TabLayout与ViewPager结合使用生命周期详解

博主前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住也分享一下给大家&#xff0c; &#x1f449;点击跳转到教程 效果 使用的布局如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> …

踏准芯片定制风口的灿芯股份,护城河足够深吗?

近年来&#xff0c;芯片定制渐成风潮&#xff0c;不仅位于下游、自身有巨大芯片需求的科技巨头如谷歌、OpenAI等纷纷转向定制&#xff0c;而且产业中游主打标准化芯片的主流芯片设计公司如博通、英伟达等&#xff0c;也相继开辟或加码定制业务。 风潮背后&#xff0c;一方面是…

【JavaEE网络】从数据链路层到应用层的DNS

目录 数据链路层以太网 DNS 数据链路层 越往下与程序员越远 代表协议&#xff1a;以太网。平常用的网线也叫“以太网线”&#xff0c;平常用的交换机也叫“以太网交换机” 以太网 认识以太网 “以太网” 不是一种具体的网络&#xff0c;而是一种技术标准&#xff1b;既包含…

Git笔记-常用指令

Git笔记-常用指令 一、概述二、仓库管理二、缓存区操作1. 添加文件到缓存区2. 取消缓存文件3. 忽略列表 三、日志状态信息四、分支操作五、六、 一、概述 这里记录一些git常用的指令。 二、仓库管理 # 本地仓库初始化 git init# 克隆仓库 git clone git_url # git clone ht…

Unity之ShaderGraph入门简介与配置

前言 ShaderGraph是Unity的一个可视化着色器编辑工具,它允许开发者在不编写代码的情况下创建复杂的着色器效果。ShaderGraph提供了一个直观的图形界面,用户可以通过拖拽节点并连接它们来构建自定义的着色器。用户可以在ShaderGraph中使用各种节点,如数学运算、纹理采样、颜…

亚马逊Lazada速卖通卖家必备:利用自养号测评提升店铺排名与销量

Wish与亚马逊、速卖通、eBay等知名的跨境电商平台有所区别&#xff0c;它专注于移动端市场。对于许多初次涉足跨境电商领域的新手卖家而言&#xff0c;他们往往困惑于如何在Wish上起步&#xff0c;因为该平台的运营模式与其他平台有所不同。Wish是一款基于手机端App的跨境电商平…

TypeScript 基础学习笔记:interface 与 type 的异同

TypeScript 学习笔记&#xff1a;interface 与 type 的异同 &#x1f3a3; 引言 在 TypeScript的世界里&#xff0c;精准的类型定义是保证代码质量与团队协作效率的关键。interface 和 type 作为两种核心的类型定义工具&#xff0c;它们各自承载着不同的设计意图与应用场景。本…

建材物料小程序商城的作用是什么

建材物料如门窗、马桶、涂料、瓷砖等有着大量需求者&#xff0c;传统模式中客户主要是同城进店咨询查看&#xff0c;但随时电商深入生活和商家模式更新&#xff0c;如今线上店铺消费也同样火热。 尤其是厂商或品牌经销商&#xff0c;无论线下还是线上都不影响生意开展&#xf…

C语言 | Leetcode C语言题解之第69题x的平方根

题目&#xff1a; 题解&#xff1a; int mySqrt(int x) {long int i 0;for(i0;;i){long int a i*i;long int b (i1)*(i1);if(a < x&&b > x){break;}}return i; }

LeetCode:三数之和

文章收录于LeetCode专栏 三数之和 给你一个包含n个整数的数组nums&#xff0c;判断nums中是否存在三个元素a、b、c &#xff0c;并使得a b c 0 &#xff1f;请你找出所有和为0且不重复的三元组。   注意&#xff1a;答案中不可以包含重复的三元组。   示例 1&#xff1a…

proxmox宿主机安装桌面

装完proxmox启动后一般进入shell界面&#xff0c;之后都是另外一台电脑连接web管理等操作&#xff0c;一直用起来还好。不过这样需要另外一台电脑连接管理操作&#xff0c;有时候调试时毕竟还是会有些不方便&#xff0c;就想能不能在宿主机上装个桌面做这类事&#xff0c;今天用…

Python基础学习之logging模块

在Python编程中&#xff0c;日志记录&#xff08;Logging&#xff09;是一个非常重要的功能。它不仅可以帮助我们追踪和调试代码中的错误&#xff0c;还可以记录程序运行时的关键信息&#xff0c;以便后续分析和优化。Python标准库中的logging模块为我们提供了强大的日志记录功…

第07-6章 应用层详解

HTTP、SSL&#xff1a;基于TCP&#xff0c;HTTP端口:80、HTTPS&#xff08;加密&#xff09;端口&#xff1a;443&#xff1b;FTP:基于TCP&#xff0c;两类端口&#xff1a;21、20&#xff08;数据传输之前需要建立连接此时是21&#xff0c;真正传输数据时用20&#xff09;TFTP…

Linux: Netfilter 简介

文章目录 1. 前言2. Netfilter 简介2.1 Netfilter 的功能2.2 Netfilter 示例2.3 Netfilter 实现概览2.3.1 Netfilter hook 的 注册 和 注销2.3.2 Netfilter hook 的触发2.3.2.1 NF_INET_PRE_ROUTING2.3.2.2 NF_INET_LOCAL_IN2.3.2.3 NF_INET_FORWARD2.3.2.4 NF_INET_LOCAL_OUT2…

【MySQL】——用户和权限管理(二)

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

Day15-JavaWeb开发-Maven高级-分模块设计与开发继承与聚合私服

1. Maven高级-分模块设计与开发 2. Maven高级-继承与聚合 2.1 继承关系实现 2.2 版本锁定 2.3 聚合实现 3. Maven高级-私服 3.1 私服-介绍 3.2 私服-资源上传与下载 4. Web开发-完结

【mysql】深入探索mysql中的各种约束条件

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

快速的异地组网工具?

【天联】是一款能够快速搭建异地组网的工具&#xff0c;其应用场景非常广泛。 零售、收银软件应用&#xff1a;通过结合【天联】&#xff0c;医药、餐饮、商超等零售行业可以实现异地统一管理。不论是分布在不同地区的门店&#xff0c;还是总部和各个分支机构&#xff0c;都可以…

工业光源环形系列一平面无影光源特点

产品特点 ◆LED灯珠均匀排布经过漫射板特殊角度反射达到漫射效果&#xff1a; ◆光源均匀性高&#xff0c;漫射效果好。