常用过滤案例
语法结构
显示过滤器的语法包含5个核心元素:IP、端口、协议、比较运算符和逻辑运算符。
- IP地址:ip.addr、ip.src、ip.dst
- 端口:tcp.port、tcp.srcport、tcp.dstport
- 协议:tcp、udp、http
- 比较运算符:> < == >= <= !=
- 逻辑运算符:and、or、not、xor(有且仅有一个条件被满足)
5个核心元素可以自由组合,比如:
- ip.addr == 192.168.32.121:显示IP地址为 192.168.32.121 的数据包
- tcp.port == 80 :显示端口为 80 的数据包
常用过滤案例
序号 | 名称 | 示例 | 描述 |
---|---|---|---|
1 | 对源地址及目的地址过滤 | ip.src == ip地址 | |
2 | 对源地址及目的地址过滤 | ip.dst == ip地址 | |
3 | 对源地址或者目的地址过滤 | ip.addr == ip地址 | |
4 | 对源地址或者目的端口过滤 | tcp.port == 80 | |
5 | 大于某个端口的过滤 | tcp.port >= 60000 | |
6 | 协议过滤 | 协议过滤 直接在filter框中输入协议名,如过滤HTTP协议,则http | |
7 | http协议相关过滤 过滤出请求地址中包含“user”的请求 | http.request.uri contains User | |
8 | 过滤域名 | http.host == www.baidu.com | |
9 | 模糊过滤域名 | http.host contains baidu | |
10 | 过滤请求的content_type类型 | http.content_type == ‘text/html’ | |
11 | 过滤http响应状态码 | http.response.code == 200 | |
12 | 过滤含有指定cookie的http数据包 | http.cookie contains userid | |
13 | 捕获多端口的数据包,可以使用and来连接 | udp.port >= 2048 | |
14 | 针对长度和内容的过滤 | udp.length < 20 | |
15 | 针对长度和内容的过滤 | http.content_length <=30 | |
16 | 针对uri 内容的过滤 | http.request.uri matches “user” (请求的uri中包含“user”关键字的) matches 后的关键字是不区分大小写的。 | |
17 | 针对uri 内容的过滤 | http.request.uri contains “User” (请求的uri中包含“user”关键字的) | |
18 | 过滤出请求地址中包含“user”的请求,不包括域名 | http.request.uri contains “User” | |
19 | 精确过滤域名 | http.host==baidu.com | |
20 | 模糊过滤域名 | http.host contains “baidu” | |
21 | 过滤请求的content_type类型 | http.content_type ==“text/html” | |
22 | 过滤http请求方法 | http.request.method==“POST” | |
23 | 过滤http请求方法 | http.request.method==“GET” | |
24 | 过滤tcp端口 | tcp.port==80 | |
25 | 过滤tcp端口 | http && tcp.port80 or tcp.port5566 | |
26 | 过滤http响应状态码 | http.response.code==302 | |
27 | 过滤含有指定cookie的http数据包 | http.cookie contains “userid” | |
28 | 比较符号 | 与:&&或者and | |
29 | 比较符号 | 或: | |
30 | 比较符号 | 非:!或者not | |
31 | 常用表达式实例 | src www.baidu.com | |
32 | 常用表达式实例 | dst www.baidu.com | |
33 | 过滤出源mac地址的数据包 | src ether host 98:1a:35:98:09:6f | |
34 | 不抓取广播包 | !broadcast | |
35 | 通过mac地址过滤 | ether host 98:1a:35:98:09:6f |
一、Wireshark是什么
Wireshark是使用最广泛的一款「开源抓包软件」,常用来检测网络问题、攻击溯源、或者分析底层通信机制。
它使用WinPCAP作为接口,直接与网卡进行数据报文交换。
二、Wireshark抓包原理
Wireshark使用的环境大致分为两种,一种是电脑直连互联网的单机环境,另外一种就是应用比较多的互联网环境,也就是连接交换机的情况。
「单机情况」下,Wireshark直接抓取本机网卡的网络流量;
「交换机情况」下,Wireshark通过端口镜像、ARP欺骗等方式获取局域网中的网络流量。
端口镜像:利用交换机的接口,将局域网的网络流量转发到指定电脑的网卡上。
ARP欺骗:交换机根据MAC地址转发数据,伪装其他终端的MAC地址,从而获取局域网的网络流量。
三、Wireshark安装入门。
安装完成后,我们学习一下快速抓包。
1. 选择网卡
打开 Wireshark 后,会直接进入「网卡选择界面」,WLAN 是我连接无线的网卡,我们抓一下这个网卡的流量,双击网卡名,自动开始抓包。
2. 停止抓包
点击左上角的「红色按钮」,可以停止抓包
3. 保存数据
点击右上角的「文件」,选择「保存」,可以保存抓包的数据
也可以直接点击工具栏的保存按钮
四、界面介绍
Wireshark 的主界面包含6个部分:
- 菜单栏:用于调试、配置
- 工具栏:常用功能的快捷方式
- 过滤栏:指定过滤条件,过滤数据包
- 数据包列表:核心区域,每一行就是一个数据包
- 数据包详情:数据包的详细数据
- 数据包字节:数据包对应的字节流,二进制
五、基础操作
接下来,我们学习一下Wireshark常用的操作。
1. 调整界面大小
工具栏中的三个「放大镜」图标,可以调整主界面数据的大小。
从左到右依次是:放大、缩小、还原默认大小。
2. 设置显示列
数据包列表是最常用的模块之一,列表中有一些默认显示的列,我们可以添加、删除、修改显示的列。
1)添加显示列
想要在数据列表中显示某一个字段,可以将这个数据字段添加至显示列中。
左键选中想要添加为列的字段,右键选择「应用为列」。
选中字段,按 Ctrl + Shift + I ,也可以实现同样的效果。
添加为列的字段会在数据列表中显示。
2)隐藏显示列
暂时不想查看的列,可以暂时隐藏起来。
在显示列的任意位置右键,取消列名的「勾选」,即可隐藏显示列。
3)删除显示列
不需要查看的字段,可以从显示列中删除。
右键需要删除的列,点击最下方的「Remove this Column」 。
注意:隐藏字段时,在列名栏的任意位置右键即可;而删除字段时,需要在指定的列名位置右键,以防误删。
3. 设置时间
数据包列表栏的时间这一列,默认显示格式看起来很不方便,我们可以调整时间的显示格式。
点击工具栏的「视图」,选择「时间显示格式」,设置你喜欢的格式。
4. 标记数据包
对于某些比较重要的数据包,可以设置成高亮显示,以达到标记的目的。
选中需要标记的数据包,右键选择最上面的「标记/取消标记」。
选中数据包,按 Ctrl + M 也可以实现同样的效果,按两次可以取消标记。
5. 导出数据包
演示快速抓包时,我们讲过保存数据包的操作,保存操作默认保存所有已经抓取的数据包。但有时候,我们只需要保存指定的数据包,这时候可以使用导出的功能。
1)导出单个数据包
选中数据包,点击左上角的「文件」,点击「导出特定分组」。
在「导出分组界面」,选择第二个 「Selected packets only」,只保存选中的数据包。
2)导出多个数据包
有时候我们需要导出多个数据包,Wireshark有一个导出标记的数据包的功能,我们将需要导出的数据包都标记起来,就可以同时导出多个数据包。
点击左上角的「文件」,点击「导出特定分组」。
在「导出分组界面」,勾选第三个 「Marked packets only」,只导出标记的数据包。
6. 开启混杂模式
局域网的所有流量都会发送给我们的电脑,默认情况下,我们的电脑只会对自己mac的流量进行解包,而丢弃其他mac的数据包。
开启混杂模式后,我们就可以解析其他mac的数据包,因此,我们使用Wireshark时,通常都会开启混杂模式。
点击菜单栏的「捕获」按钮,点击「选项」。
勾选 在所有接口上使用混杂模式。
六、数据包详解
1. 数据包的各层协议
2. 数据包对应的16进制表示和ascii类型数据显示
3. 数据结构包的详细解析
解释IP数据报的首部
1)数据链路层
内容 | 说明 | 备注 |
---|---|---|
Ethernet II | 以太网协议版本 II | |
Source: Apple_de:1f:24 | 厂名:序号 | |
(64:c7:53: de:1f:24) | 网卡地址 | |
Type: IPv4 (0x0800) | 协议类型 |
2)网络层
1. 在设计以太网时,人为规定了每个帧的最大长度1500字节 (即除去以太网帧首部的数据部分),作为每次数据传输单元(即MTU)。
2. 物理层会限制每次发送数据帧的最大长度,当网络层收到一份待发送的IP数据报时,会进行选路(选择出接口),并查询该接口MTU值。
3. 如果IP数据报中的数据长度大于该接口MTU值,会发两种情况:丢包或分片。当IP数据报开启允许分片功能,则会进行分片,否则就丢包。
例如分析IP分片数据包分析
4. IP分片数据包
由于以太网数据报的“数据”部分最长只有1500字节,因此如果IP数据报超过了1500字节,就需要分割成多个以太网数据包分开发送。
在使用ping命令时,默认是不会超过1500字节的,所以如果想要获取IP分片包,需要指定发送的ICMP包大大小。
比如: ping 192.168.0.1 -l 3000 指定获取包的大小为3000
5. 分析IP分片数据包分析
在该获取文件中,123帧和678帧是一个完整的ping包,其中123是一个请求包,678是响应包。
1. 分析 第1帧数据包
2. 分析第2帧数据包
3. 分析第3帧数据包
七、过滤器操作
过滤器是Wireshark的核心功能,也是我们平时使用最多的一个功能。
Wireshark提供了两个过滤器:抓包过滤器 和 显示过滤器。两个过滤器的过滤思路不同。
- 抓包过滤器:重点在动作,需要的包我才抓,不需要的我就不抓。
- 显示过滤器:重点在数据的展示,包已经抓了,只是不显示出来。
1. 抓包过滤器
抓包过滤器在抓包前使用,它的过滤有一个基本的语法格式:BPF语法格式。
1)BPF语法
BPF(全称 Berkeley Packet Filter),中文叫伯克利封包过滤器,它有四个核心元素:类型、方向、协议 和 逻辑运算符。
- 类型Type:主机(host)、网段(net)、端口(port)
- 方向Dir:源地址(src)、目标地址(dst)
- 协议Proto:各种网络协议,比如:tcp、udp、http
- 逻辑运算符:与( && )、或( || )、非( !)
四个元素可以自由组合,比如:
- src host 192.168.31.1:抓取源IP为 192.168.31.1 的数据包
- tcp || udp:抓取 TCP 或者 UDP 协议的数据包
2)使用方式
使用抓包过滤器时,需要先停止抓包,设置完过滤规则后,再开始抓包。
停止抓包的前提下,点击工具栏的捕获按钮,点击选项。
在弹出的捕获选项界面,最下方的输入框中输入过滤语句,点击开始即可抓包。
提示:抓包过滤器的输入框,会自动检测语法,绿色代表语法正确,红色代表语法错误。
2. 显示过滤器
显示过滤器在抓包后或者抓包的过程中使用。
1)语法结构
显示过滤器的语法包含5个核心元素:IP、端口、协议、比较运算符和逻辑运算符。
- IP地址:ip.addr、ip.src、ip.dst
- 端口:tcp.port、tcp.srcport、tcp.dstport
- 协议:tcp、udp、http
- 比较运算符:> < == >= <= !=
- 逻辑运算符:and、or、not、xor(有且仅有一个条件被满足)
5个核心元素可以自由组合,比如:
- ip.addr == 192.168.32.121:显示IP地址为 192.168.32.121 的数据包
- tcp.port == 80 :显示端口为 80 的数据包
2)使用方式
在过滤栏输入过滤语句,修改后立即生效。
3. 常用用法
序号 | 名称 | 示例 | 描述 |
---|---|---|---|
1 | 对源地址及目的地址过滤 | ip.src == ip地址 | |
2 | 对源地址及目的地址过滤 | ip.dst == ip地址 | |
3 | 对源地址或者目的地址过滤 | ip.addr == ip地址 | |
4 | 对源地址或者目的端口过滤 | tcp.port == 80 | |
5 | 大于某个端口的过滤 | tcp.port >= 60000 | |
6 | 协议过滤 | 协议过滤 直接在filter框中输入协议名,如过滤HTTP协议,则http | |
7 | http协议相关过滤 过滤出请求地址中包含“user”的请求 | http.request.uri contains User | |
8 | 过滤域名 | http.host == www.baidu.com | |
9 | 模糊过滤域名 | http.host contains baidu | |
10 | 过滤请求的content_type类型 | http.content_type == ‘text/html’ | |
11 | 过滤http响应状态码 | http.response.code == 200 | |
12 | 过滤含有指定cookie的http数据包 | http.cookie contains userid | |
13 | 捕获多端口的数据包,可以使用and来连接 | udp.port >= 2048 | |
14 | 针对长度和内容的过滤 | udp.length < 20 | |
15 | 针对长度和内容的过滤 | http.content_length <=30 | |
16 | 针对uri 内容的过滤 | http.request.uri matches “user” (请求的uri中包含“user”关键字的) matches 后的关键字是不区分大小写的。 | |
17 | 针对uri 内容的过滤 | http.request.uri contains “User” (请求的uri中包含“user”关键字的) | |
18 | 过滤出请求地址中包含“user”的请求,不包括域名 | http.request.uri contains “User” | |
19 | 精确过滤域名 | http.host==baidu.com | |
20 | 模糊过滤域名 | http.host contains “baidu” | |
21 | 过滤请求的content_type类型 | http.content_type ==“text/html” | |
22 | 过滤http请求方法 | http.request.method==“POST” | |
23 | 过滤http请求方法 | http.request.method==“GET” | |
24 | 过滤tcp端口 | tcp.port==80 | |
25 | 过滤tcp端口 | http && tcp.port80 or tcp.port5566 | |
26 | 过滤http响应状态码 | http.response.code==302 | |
27 | 过滤含有指定cookie的http数据包 | http.cookie contains “userid” | |
28 | 比较符号 | 与:&&或者and | |
29 | 比较符号 | 或: | |
30 | 比较符号 | 非:!或者not | |
31 | 常用表达式实例 | src www.baidu.com | |
32 | 常用表达式实例 | dst www.baidu.com | |
33 | 过滤出源mac地址的数据包 | src ether host 98:1a:35:98:09:6f | |
34 | 不抓取广播包 | !broadcast | |
35 | 通过mac地址过滤 | ether host 98:1a:35:98:09:6f |
比较符号
与:&&或者and
或:||或者or
非:!或者not
————————————————
原文链接:https://blog.csdn.net/Python84310366/article/details/144351889
原文链接:https://blog.csdn.net/hao_wujing/article/details/144523767