当前位置: 首页 > news >正文

Wireshark 筛选功能详解:语法与示例

文章目录

  • 1 摘要
  • 2 显示过滤器(Display Filters)
    • 2.1 基本语法结构
      • 2.1.1 常用运算符
      • 2.1.2 常用协议字段示例
        • 2.1.2.1 IP协议过滤
        • 2.1.2.2 TCP协议过滤
        • 2.1.2.3 UDP协议过滤
        • 2.1.2.4 HTTP协议过滤
        • 2.1.2.5 DNS协议过滤
        • 2.1.2.6 ARP协议过滤
        • 2.1.2.7 ICMP协议过滤
      • 2.1.3 复合表达式示例
  • 3 捕获过滤器(Capture Filters)
    • 3.1 基本语法
    • 3.2 常用捕获过滤器示例
      • 3.2.1 基本主机/端口过滤
      • 3.2.2 协议过滤
      • 3.2.3 网络范围过滤
      • 3.2.4 MAC地址过滤
      • 3.2.5 复合条件过滤
    • 3.3 捕获过滤器与显示过滤器的区别
  • 4 高级筛选技巧
    • 4.1 使用比较运算符
    • 4.2 使用位运算
    • 4.3 使用范围检查
    • 4.4 使用协议层次关系
    • 4.5 使用自定义列作为过滤条件
  • 5 实用筛选示例
    • 5.1 分析网络问题
    • 5.2 安全分析
    • 5.3 性能分析
  • 6 过滤器自动补全和验证
  • 7 保存和重用过滤器
  • 8 查找协议字段的方法
  • 8 注意事项

1 摘要

Wireshark作为最流行的网络协议分析工具,其强大的筛选功能可以帮助用户快速定位和分析网络数据包。下面我将详细介绍Wireshark的筛选语法,包括显示过滤器和捕获过滤器,并提供详细的示例说明。

2 显示过滤器(Display Filters)

显示过滤器用于在已捕获的数据包中进行筛选,只显示符合条件的数据包。

2.1 基本语法结构

[协议].[字段] [运算符] [值]

2.1.1 常用运算符

运算符说明示例
==等于ip.src == 192.168.1.1
!=不等于ip.src != 192.168.1.1
>大于frame.len > 1000
<小于frame.len < 128
>=大于等于tcp.srcport >= 1024
<=小于等于udp.length <= 512
contains包含http.host contains "google"
matches正则匹配http.request.uri matches "login.*php"
and逻辑与ip.src==192.168.1.1 and tcp.port==80
or逻辑或ip.src==192.168.1.1 or ip.src==192.168.1.2
not逻辑非not arp

时间过滤

frame.time >= "2023-01-01 00:00:00" and frame.time <= "2023-01-02 00:00:00"

2.1.2 常用协议字段示例

2.1.2.1 IP协议过滤
ip.addr == 192.168.1.1        # 源或目的IP是192.168.1.1
ip.src == 192.168.1.1         # 源IP是192.168.1.1
ip.dst == 192.168.1.1         # 目的IP是192.168.1.1
ip.ttl < 64                   # TTL值小于64
ip.version == 4               # 只显示IPv4数据包
ip.version == 6               # 只显示IPv6数据包

ip.addr == 172.16.4.20示例:
在这里插入图片描述
ip.src == 172.16.4.20示例:
在这里插入图片描述

2.1.2.2 TCP协议过滤
tcp.port == 80                # 源或目的端口是80
tcp.srcport == 80             # 源端口是80
tcp.dstport == 80             # 目的端口是80
tcp.flags.syn == 1            # SYN标志置位的数据包
tcp.flags.ack == 1            # ACK标志置位的数据包
tcp.flags.fin == 1            # FIN标志置位的数据包
tcp.analysis.retransmission   # 重传的数据包
tcp.window_size < 1024        # 窗口大小小于1024字节
2.1.2.3 UDP协议过滤
udp.port == 53                # DNS流量
udp.length > 512              # UDP数据长度大于512字节
同TCP协议过滤

udp.srcport == 30490示例:
在这里插入图片描述

2.1.2.4 HTTP协议过滤
http.request.method == "GET"  # HTTP GET请求
http.request.method == "POST" # HTTP POST请求
http.response.code == 200     # HTTP 200响应
http.host contains "google"   # 主机名包含"google"
http.request.uri matches ".*\.jpg" # 请求URI以.jpg结尾
http.content_type == "text/html" # HTML内容
2.1.2.5 DNS协议过滤
dns.flags.response == 0       # DNS查询
dns.flags.response == 1       # DNS响应
dns.qry.name contains "example.com" # 查询的域名
dns.resp.type == 1            # A记录响应
2.1.2.6 ARP协议过滤
arp.opcode == 1               # ARP请求
arp.opcode == 2               # ARP响应
arp.src.hw_mac == 00:11:22:33:44:55 # 源MAC地址
2.1.2.7 ICMP协议过滤
icmp.type == 8                # ICMP Echo请求(ping)
icmp.type == 0                # ICMP Echo响应
icmp.code == 3                # 目标不可达

2.1.3 复合表达式示例

# 来自192.168.1.1或192.168.1.2的HTTP GET请求
(ip.src == 192.168.1.1 or ip.src == 192.168.1.2) and http.request.method == "GET"# 非HTTPS的Web流量
tcp.port == 80 and not ssl# 长度大于1000字节的TCP数据包
tcp and frame.len > 1000# 来自特定MAC地址的DNS查询
eth.src == 00:11:22:33:44:55 and dns

示例:ip.src == 172.16.4.20 or ip.src == 172.16.4.40
在这里插入图片描述

3 捕获过滤器(Capture Filters)

捕获过滤器用于在捕获数据包时就进行过滤,减少捕获的数据量。
打开方式如下:
1.点击捕获——>点击捕获过滤器
在这里插入图片描述
2.添加规则或者删除规则
在这里插入图片描述

3.1 基本语法

[协议] [方向] [主机/端口] [条件]

3.2 常用捕获过滤器示例

3.2.1 基本主机/端口过滤

host 192.168.1.1              # 捕获与192.168.1.1相关的所有流量
src host 192.168.1.1          # 源IP是192.168.1.1
dst host 192.168.1.1          # 目的IP是192.168.1.1
port 80                       # 捕获端口80的流量
src port 80                   # 源端口是80
dst port 80                   # 目的端口是80
portrange 8000-9000           # 捕获8000-9000端口范围的流量

3.2.2 协议过滤

tcp                           # 只捕获TCP流量
udp                           # 只捕获UDP流量
icmp                          # 只捕获ICMP流量
arp                           # 只捕获ARP流量
not arp                       # 不捕获ARP流量

3.2.3 网络范围过滤

net 192.168.1.0/24            # 捕获192.168.1.0/24网络的流量
src net 192.168.1.0/24        # 源网络是192.168.1.0/24
dst net 192.168.1.0/24        # 目的网络是192.168.1.0/24

3.2.4 MAC地址过滤

ether host 00:11:22:33:44:55  # 捕获特定MAC地址的流量
ether src 00:11:22:33:44:55   # 源MAC地址
ether dst 00:11:22:33:44:55   # 目的MAC地址

3.2.5 复合条件过滤

# 捕获192.168.1.1到192.168.1.2的HTTP流量
host 192.168.1.1 and host 192.168.1.2 and port 80# 捕获非HTTP和非DNS的TCP流量
tcp and not port 80 and not port 53# 捕获长度大于1000字节的数据包
greater 1000# 捕获广播或多播流量
broadcast or multicast

3.3 捕获过滤器与显示过滤器的区别

特性捕获过滤器显示过滤器
应用时机捕获数据包时捕获后分析时
语法使用BPF语法使用Wireshark特定语法
效率减少捕获数据量不影响原始捕获文件
灵活性有限更灵活复杂
可用字段限于底层协议字段可访问所有解析字段

4 高级筛选技巧

4.1 使用比较运算符

# 查找HTTP响应时间大于1秒的请求
http.time > 1# 查找TCP窗口大小异常的数据包
tcp.window_size < 1024 or tcp.window_size > 65535

4.2 使用位运算

# 检查TCP标志位(例如检查SYN-ACK)
tcp.flags == 0x12            # SYN=1, ACK=1, 其他=0# 检查IP分片标志
ip.flags.mf == 1             # 更多分片标志置位

4.3 使用范围检查

# 查找HTTP响应码在400-499之间的错误
http.response.code >= 400 and http.response.code <= 499# 查找特定时间范围内的数据包
frame.time >= "2023-01-01" and frame.time <= "2023-01-02"

4.4 使用协议层次关系

# 查找HTTP over SSL/TLS
ssl.record.content_type == 23 and http# 查找DNS over TCP
tcp.port == 53 and dns

4.5 使用自定义列作为过滤条件

# 如果添加了自定义列"my_column",可以这样过滤
_ws.col.my_column == "some_value"

5 实用筛选示例

5.1 分析网络问题

# 查找重传数据包
tcp.analysis.retransmission# 查找零窗口数据包
tcp.analysis.zero_window# 查找重复ACK
tcp.analysis.duplicate_ack# 查找连接重置
tcp.flags.reset == 1

5.2 安全分析

# 查找可能的端口扫描
tcp.flags.syn == 1 and tcp.flags.ack == 0# 查找ICMP重定向
icmp.type == 5# 查找ARP欺骗
arp.dst.hw_mac != arp.dst.proto_ipv4

5.3 性能分析

# 查找大文件传输
tcp.len > 1400# 查找高延迟ACK
tcp.analysis.ack_lost_segment# 查找HTTP慢响应
http.time > 2

6 过滤器自动补全和验证

Wireshark提供了方便的过滤器自动补全功能:

  1. 在过滤器栏输入时,按Ctrl+Space可以触发自动补全
  2. 输入过程中,Wireshark会实时验证语法:
    • 绿色背景:有效过滤器
    • 红色背景:语法错误
    • 黄色背景:语法正确但字段可能不存在于当前捕获文件中

7 保存和重用过滤器

  1. 可以点击过滤器栏右侧的"+"按钮保存常用过滤器
  2. 通过"Analyze" → "Display Filters"管理保存的过滤器
  3. 捕获过滤器可以保存在捕获配置中

8 查找协议字段的方法

在Wireshark中,你可以通过以下方式查找特定协议的字段:

  1. 选择一个相关数据包

  2. 在数据包详细信息面板中展开协议

  3. 右键点击你感兴趣的字段
    如下图:
    在这里插入图片描述

  4. 选择"Apply as Filter"或"Prepare as Filter"
    如下图:
    在这里插入图片描述

这样Wireshark会自动生成正确的过滤表达式。如下图:
在这里插入图片描述

8 注意事项

  1. 显示过滤器使用BPF(Berkeley Packet Filter)语法,而捕获过滤器使用libpcap语法
  2. 显示过滤器比捕获过滤器更灵活,支持更多协议和字段
  3. 复杂的捕获过滤器可能会影响捕获性能
  4. 某些协议字段可能只在特定版本或特定配置的Wireshark中可用
  5. 显示过滤器不会修改原始捕获文件,只是改变显示内容
  6. 捕获过滤器会丢弃不符合条件的数据包,无法恢复
  7. 过滤器语法区分大小写,协议和字段通常是小写

通过熟练掌握Wireshark的筛选功能,可以快速定位网络问题,分析特定流量,大大提高网络故障排查的效率。

相关文章:

  • OpenAI推出o3-Pro模型
  • 开源项目实战学习之YOLO11:12.9 ultralytics-models-sam-amg.py
  • 【kafka】消息模型与工作原理详解
  • 车载软件和整车电子架构正重新定义汽车行业
  • 查看 Ubuntu 系统信息
  • MATLAB-磁偶极子的空间磁场强度仿真
  • 适合有C基础后快速上手C++
  • RAG技术全解析:从概念到实践,构建高效语义检索系统——嵌入模型与向量数据库搭建指南
  • 智能空气流向控制系统SKLX的优化与实践
  • 一款自制的OpenMV4模块
  • LRU 结构 LinkedHashMap:HashMap+双向链表的完美结合
  • 用python玩转大语言模型——从 RNN 到文本生成大语言模型的奇幻之旅
  • MMDG++:构筑多模态人脸防伪新防线,攻克伪造攻击与场景漂移挑战
  • 日期的数据格式转换
  • 爬取新浪新闻网的全部策略
  • Go 语言 JWT 深度集成指南
  • 升级 Ubuntu Linux 内核的几种不同方法
  • Squid 代理服务器实战:解决动态 IP 访问第三方接口的生产级方案
  • 软件定义对象存储购买指南
  • 数据库游标:逐行处理数据的“手术刀”——从原理到实战的深度解析
  • 海外营销推广 平台/青岛设计优化公司
  • 目标网站上做关键字布局/seo技术培训茂名
  • 怎么给网站做域名重定向/seo技术外包公司
  • 网站优化怎么做分录/广州关键词搜索排名
  • 兖州中材建设有限公司网站/营销型网站建设解决方案
  • 网站如何备案icp备案/国内免费建网站