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

发布于:2024-05-20 ⋅ 阅读:(153) ⋅ 点赞:(0)

目录

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后,可直接在此处填写过滤语句,效率更高。

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

过滤关系

English C-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)来连接基本过滤表达式。

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

English C-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 == 192.168.1.5 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

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数据


网站公告

今日签到

点亮在社区的每一天
去签到