深入解析Wireshark2:过滤器与TCP三次握手分析

目录

1 wireshark过滤器

1.1 捕获过滤器

设置目的

工作原理

注意事项

设置步骤

1.2 显示过滤器

设置目的

工作原理

注意事项

设置步骤

过滤关系

复合过滤表达式

2 常见显示过滤需求及其表达式

2.1 数据链路层

2.2 网络层

2.3 传输层

2.4 应用层

2.5 其他常见

3 使用wireshark分析TCP三次握手

4 使用wireshark分析TCP数据包


1 wireshark过滤器

初学者在使用Wireshark时,经常会遇到大量冗余的数据包,这使得在海量数据中定位自己关心的数据包变得非常困难。为了解决这个问题,Wireshark提供了两种类型的过滤器:捕获过滤器和显示过滤器。掌握这两种过滤器的使用,将极大地帮助你在复杂的网络数据中迅速找到所需的信息。

1.1 捕获过滤器

捕获过滤器(Capture Filter)是Wireshark等网络分析工具中的一个功能,用于在数据包被捕获到计算机内存之前对它们进行过滤。捕获过滤器使用BPF(Berkeley Packet Filter)语法来定义规则,这些规则决定了哪些数据包应该被网卡捕获并传递给Wireshark进行分析。

设置目的

设置捕获过滤器的主要目的是减少捕获的数据量,以便更高效地分析网络流量。由于网卡捕获的数据包通常会很快填满计算机的内存,如果不加过滤,可能会导致数据丢失或分析变得困难。通过使用捕获过滤器,可以指定只捕获感兴趣的数据包,从而节省内存和计算资源。

工作原理

捕获过滤器的工作原理是在数据包被发送到网络适配器(如以太网卡)的驱动程序之前,由操作系统根据设置的过滤规则进行过滤。只有符合过滤规则的数据包才会被捕获并传递给网络分析工具

注意事项

捕获过滤器是在数据包被捕获之前应用的,因此它不会影响已经捕获到内存中的数据包。如果您在捕获过程中更改了捕获过滤器的设置,只有新捕获的数据包会受到影响,已经捕获的数据包不会改变。

设置步骤

点击捕获选项按钮:

在对话框中选中需要监听的接口,设置混杂模式,设置抓取数据包的过滤条件:

混杂模式(Promiscuous Mode)的主要作用就是使网卡能够接收所有经过它的数据流,不论这些数据流的目的地址是否是它本身。

在默认情况下,网卡通常只接收发往其自己地址(即目的地址为其MAC地址)的数据包,以及广播和组播数据包。但是,当网卡被设置为混杂模式时,它会捕获所有流经其接口的数据包,包括那些目的地址不是其自身的数据包。

1.2 显示过滤器

显示过滤器(Display Filter) 是网络数据包分析工具(如 Wireshark)中的一种功能,用于在已经捕获的网络数据包集合中过滤出满足特定条件的数据包进行显示。这些条件可以基于数据包的各个字段(如源地址、目标地址、端口号、协议类型等)来设置。

设置目的

显示过滤器的设置目的是为了在捕获文件已经存在的情况下,进一步过滤和筛选数据包,以便更精确地分析网络流量。通过设置显示过滤器,用户可以选择只显示那些符合特定条件的数据包,从而忽略掉那些不感兴趣或不需要分析的数据包。这样可以大大提高网络流量分析的效率和准确性。

工作原理

显示过滤器的工作原理是在数据包已经被捕获到内存之后,根据用户设置的过滤条件对数据包进行筛选和过滤。在Wireshark等网络分析工具中,显示过滤器使用一种特定的语法规则来定义过滤条件,这些条件可以基于数据包的各个字段(如源地址、目标地址、端口号、协议类型等)进行设置。

当用户设置了一个显示过滤器后,Wireshark会在显示数据包列表之前,根据过滤条件对数据包进行遍历和匹配。只有那些符合过滤条件的数据包才会被显示出来,而那些不符合条件的数据包则会被忽略。这样,用户就可以只关注那些自己感兴趣的数据包,而不需要在大量的数据包中手动查找。

注意事项

显示过滤器并不会删除或修改捕获文件中的数据包,它只是改变了Wireshark在显示数据包时的行为。因此,即使设置了显示过滤器,用户仍然可以随时删除或修改过滤条件,以恢复原始的数据包显示状态。

此外,由于显示过滤器是在数据包已经被捕获到内存之后应用的,因此它不会影响已经捕获到内存中的数据包。如果用户需要再次分析这些数据包,只需要重新加载捕获文件并设置相应的显示过滤器即可。

设置步骤

右键,显示表达式

一条基本的表达式由过滤项过滤关系过滤值三项组成。

比如:http contains baidu.com, http为过滤项, contains 为过滤关系, baidu.com 为过滤
值,表示显示http协议包中包含关键词"baidu.com"的所有数据包。

比如:ip.addr == 192.168.1.1,ip.addr是过滤项、==是过滤关系,192.168.1.1是过滤值,表达示的意思是找出所有ip协议中源或目标ip 等于 192.168.1.1的数据包。

配置后,就会自动生成过滤语句:

熟练使用wirshark后,可直接在此处填写过滤语句,效率更高。

因为去过滤表达式中一个一个找过滤项太麻烦了。

过滤关系

EnglishC-like 说明示例
eq==等于 (Equals)ip.addr eq 192.168.1.1 筛选源或目标 IP 地址为 192.168.1.1 的数据包
ne!=不等于 (Not Equals)tcp.port ne 80 筛选 TCP 端口号不是 80 的数据包
gt>大于 (Greater Than)frame.len gt 100 筛选帧长度大于 100 字节的数据包
lt<小于 (Less Than)frame.len lt 500 筛选帧长度小于 500 字节的数据包
ge>=大于等于 (Greater Than or Equals)tcp.seq ge 1000 筛选 TCP 序列号大于或等于 1000 的数据包
le<=小于等于 (Less Than or Equals)frame.number le 10 筛选前 10 个捕获的数据包
contains(无)包含 (Contains)http.request.uri contains "/search?" 筛选 HTTP 请求 URI 中包含 "/search?" 的数据包
matches(无)匹配 (Matches),通常使用正则表达式ip.src matches "\b192\.168\.\d{1,3}\.\d{1,3}\b" 筛选源 IP 地址在 192.168.x.x 范围内的数据包
bitwise_and&位与 (Bitwise AND)通常不常用在显示过滤器中,但可用于高级过滤需求,如 tcp.flags.syn & tcp.flags.ack == 1 筛选同时具有 SYN 和 ACK 标志的 TCP 数据包

复合过滤表达式

在Wireshark中,复合过滤表达式允许你将多个基本过滤表达式组合在一起,以创建更复杂的过滤条件。这些复合过滤表达式通常使用逻辑操作符(如 andor 和 not)来连接基本过滤表达式。

以下是重新整理后的表格,包含了复合过滤表达式的英文单词、符号、说明以及示例:

EnglishC-like 说明示例
and&& 逻辑与,表示两个条件都必须满足ip.src == 192.168.1.1 && tcp.dstport == 80
ip.src == 192.168.1.1 and tcp.dstport == 80
筛选出所有源IP地址为 192.168.1.1 并且目的TCP端口为 80 的数据包。
or||逻辑或,表示两个或更多条件中至少有一个满足ip.src == 192.168.1.1 || ip.dst == 10.0.0.1
ip.src == 192.168.1.1 or ip.dst == 10.0.0.1
筛选出所有源IP地址为 192.168.1.1 或者目的IP地址为 10.0.0.1 的数据包。
xor^^逻辑异或,表示两个条件中只有一个满足可以使用 &&(逻辑与)和 !(逻辑非)来模拟 xor(逻辑异或)的行为。
(ip.src == 192.168.1.1 && !ip.dst == 10.0.0.1) || (!ip.src == 192.168.1.1 && ip.dst == 10.0.0.1)
筛选出所有源IP地址为 192.168.1.1 但目的IP地址不是 10.0.0.1 的数据包,或者源IP地址不是 192.168.1.1 但目的IP地址是 10.0.0.1 的数据包。
not! 逻辑非,表示条件不满足!tcp.dstport == 80
not tcp.dstport == 80
筛选出所有目的TCP端口不是80的数据包。
[...](无直接符号)范围匹配,用于匹配字段的某个范围内的值可以使用比较运算符(如>=<=)来指定一个值的范围。
frame.number >= 10 and frame.number <= 20
当这两个条件同时满足时(即帧号在10到20之间,包括10和20),数据包就会被筛选出来。
in(无直接符号,但可以用==matches代替)集合匹配,用于匹配字段的某个集合中的值可以使用==(等于)或matches(匹配)操作符与多个条件组合来实现类似的功能。
ip.src == 192.168.1.1 or ip.src == 192.168.1.2 or ip.src == 10.0.0.1
ip.src matches "192.168.1.(1|2)|10.0.0.1"
正则表达式中的|表示逻辑或,(1|2)表示匹配数字1或2,而整个表达式则匹配IP地址192.168.1.1192.168.1.210.0.0.1

示例:执行ping www.baidu.com 

ping 命令用的是ICMP 协议。

获取的数据包列表如下:

观察上述获取的数据包列表,含有大量的无效数据。这时可以通过设置显示器过滤条件进行提取分析信息:ip.addr == 14.215.177.39 and icmp 并进行过滤:

2 常见显示过滤需求及其表达式

2.1 数据链路层

  • 筛选mac地址为04:f9:38:ad:13:26的数据包:eth.addr== 04:f9:38:ad:13:26
  • 筛选源mac地址为04:f9:38:ad:13:26的数据包:eth.src == 04:f9:38:ad:13:26

2.2 网络层

  • 筛选ip地址为192.168.1.1的数据包:ip.addr == 192.168.1.1 或 ip.src == 192.168.1.1 或 ip.dst == 192.168.1.1(取决于是否只关心源或目的IP)
  • 筛选192.168.1.0网段的数据:ip.addr contains 192.168.1(注意这可能也会匹配到192.168.10.x这样的地址,更精确的是使用CIDR表示法如ip.src cidr 192.168.1.0/24
  • 筛选192.168.1.1和192.168.1.2之间的数据包:ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2
  • 筛选从192.168.1.1到192.168.1.2的数据包:ip.src == 192.168.1.1 && ip.dst == 192.168.1.2

2.3 传输层

  • 筛选tcp协议的数据包:tcp
  • 筛选除tcp协议以外的数据包:!tcp
  • 筛选端口为80的数据包:tcp.port == 80
  • 筛选12345端口和80端口之间的数据包:tcp.port == 12345 && tcp.port == 80
  • 筛选从12345端口到80端口的数据包:tcp.srcport == 12345 && tcp.dstport == 80

2.4 应用层

  • 特别说明:http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1),
    http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.
    header_name形式。
  • 筛选url中包含.php的http数据包:http.request.uri contains .php
  • 筛选内容包含username的http数据包:http contains username

URL(Uniform Resource Locator,统一资源定位符)URI(Uniform Resource Identifier,统一资源标识符)在Web和网络资源定位中扮演着重要的角色,但它们在定义和用途上有所不同。

URL是用于标识和定位互联网上资源的地址。它是一个标准的格式,用于表示互联网资源的位置,并且可以指向各种类型的资源,如网页、图片、视频、文件等。URL通常由多个部分组成,包括协议类型(如HTTP、HTTPS)、主机名(域名或IP地址)、路径(资源在主机上的位置)以及可选的查询参数(用于传递额外的信息)。通过URL,用户可以方便地访问和定位到特定的网络资源。

URI是一个更广泛的概念,用于标识某一互联网资源名称的字符串。URI允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。Web上可用的每种资源(如HTML文档、图像、视频片段、程序等)都由一个URI进行定位。URI可以包括URL和URN(Uniform Resource Name,统一资源名称)两个类别。URL是URI的一个子集,因此所有的URL都是URI,但并非所有的URI都是URL。

总的来说,URL和URI之间的关系可以理解为:URL是URI的一个子集,用于具体地标识和定位互联网上的资源,而URI是一个更广泛的概念,可以包括URL以及其他类型的资源标识符。

2.5 其他常见

  • 筛选特定长度的数据包:frame.len == 100(其中100是数据包的长度)
  • 筛选特定时间范围内的数据包:frame.time >= "2023-10-23 10:00:00" and frame.time <= "2023-10-23 11:00:00"(注意时间格式可能因Wireshark版本而异)
  • 筛选特定接口上捕获的数据包:wlan.iface.name == "Wi-Fi"(假设你的无线接口名为"Wi-Fi")

使用wireshark分析TCP三次握手

设置过滤阿里云服务器的IP地址:ip.addr == 47.104.157.132
使用TCP调试助手连接阿里云服务器上的TCP服务端

发现wireshark捕获到了3条TCP数据:

第一次握手数据包:客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图:

第二次握手:服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的seq加1,即0+1=1。如下图:

第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1,如下图:

使用wireshark分析TCP数据包

使用tcp调试助手向阿里云服务器TCP服务端发送hello,并且接收到服务器返回的hello world

发现wireshark捕获到了四条TCP数据

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

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

相关文章

C++ | Leetcode C++题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution { public:int numDecodings(string s) {int n s.size();// a f[i-2], b f[i-1], c f[i]int a 0, b 1, c;for (int i 1; i < n; i) {c 0;if (s[i - 1] ! 0) {c b;}if (i > 1 && s[i - 2] ! 0 &&a…

QCustomplot---动态图

QCustomplot绘制动态曲线图-游标及鼠标跟踪显示数值_qcustomplot 游标-CSDN博客 m_timer new QTimer(this);connect(m_timer,SIGNAL(timeout()),this,SLOT(slotTimeout()));m_timer->start(50); void MainWindow::slotTimeout() {static int p0;static int i0;double m,m1…

石碑之谜:滚动机关

描述 在蒙德和璃月的边界地带&#xff0c;有一个被遗忘的神庙&#xff0c;里面有一个奇怪的机关&#xff1a;滚动石碑。小熊必须操作这个112的长方体石碑&#xff0c;使其通过不同的地面环境&#xff0c;最终放置到神秘的符号“O”上&#xff0c;以解开通往宝藏的大门。 石碑…

【智能算法】清道夫优化算法(CFO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;W Zhang受到清道夫自然行为启发&#xff0c;提出了清道夫优化算法&#xff08;Cleaner Fish Optimization Algorithm, CFO&#xff09;。 2.算法原理 2.1算法思想 CF…

【oracle】图片转为字节、base64编码等形式批量插入oracle数据库并查询

1.熟悉、梳理、总结下Oracle相关知识体系 2.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 资源下载&#xff1a; oci.dll、oraocci11.dll、oraociei11.dll3个资源文件资源下载&#xff1a; Instant Client Setup.exe资源下载&#xff1a; oci.dll、oraocci11.dll、oraoc…

使用Docker进行Jmeter分布式搭建

大家好&#xff0c;随着技术的不断发展&#xff0c;对性能测试的要求也日益提高。在这样的背景下&#xff0c;如何利用 Docker 来巧妙地搭建 Jmeter 分布式成为了关键所在。现在&#xff0c;就让我们开启这场探索之旅&#xff0c;揭开其神秘的面纱。前段时间给大家分享了关于 L…

SQL慢查询学习篇

https://www.cnblogs.com/isyues/p/17733015.html 1. 对扫到的SQL慢查询语句执行 explain explain select task_id, channel, count(task_id) as count from tablename where send_time > "2024-05-10 16:13:59" and send_time < "2024-05-14 16:13:59…

LeetCode 235. 二叉搜索树的最近公共祖先

LeetCode 235. 二叉搜索树的最近公共祖先 1、题目 题目链接&#xff1a;235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表…

【C语言】指针(二)

目录 一、传值调用和传址调用 二、数组名的理解 三、通过指针访问数组 四、一维数组传参的本质 五、指针数组 六、指针数组模拟实现二维数组 一、传值调用和传址调用 指针可以用在哪里呢&#xff1f;我们看下面一段代码&#xff1a; #include <stdio.h>void Swap(i…

ue引擎游戏开发笔记(41)——行为树的建立(2)--丰富ai行为:巡逻后返回原处

1.需求分析&#xff1a; 就敌人ai而言&#xff0c;追踪到敌人有可能丢失目标&#xff0c;丢失目标后应该能返回原来位置&#xff0c;实现这一功能。 2.操作实现&#xff1a; 1.思路&#xff1a;利用clear value函数&#xff0c;禁用掉当前的追踪功能&#xff0c;执行之后的返…

JUnit5参数化用例(三)

JUnit5枚举参数的参数化&#xff1a; 使用枚举类作为测试数据枚举参数参数化注解EnumSource必须与ParameterizedTest结合使用 枚举参数化注解 -简单使用&#xff1a; 需要添加EnumSource注解测试方法传入枚举类作为参数 在执行前&#xff0c;我们需了解enum枚举的使用方式&…

分布式计算、并行计算、网格计算、边缘计算

分布式计算 分布式计算是一种计算方法&#xff0c;它将一个大型的计算任务分解成多个子任务&#xff0c;并将这些子任务分布在网络上的多台计算机&#xff08;节点&#xff09;上同时执行。这些节点通过通信网络协同工作&#xff0c;共同完成任务。每个节点可以独立处理自己的…