Wireshark 过滤器使用指南

Wireshark 提供两种主要过滤器:捕获过滤器显示过滤器,帮助您精准定位网络数据。

一、捕获过滤器 (Capture Filters)

在开始捕获前设置,决定哪些流量被捕获到文件中

基本语法

bash
复制
[协议] [方向] [主机] [值] [逻辑运算]

常用过滤示例

  1. 按IP过滤

    bash
    复制
    host 192.168.1.100     # 捕获与特定IP相关的所有流量
    src host 192.168.1.5   # 捕获来自指定源IP的流量
    dst host 8.8.8.8       # 捕获发往目标IP的流量
    
  2. 按网络段过滤

    bash
    复制
    net 192.168.1.0/24    # 捕获整个子网的流量
    
  3. 按端口过滤

    bash
    复制
    port 80               # 捕获HTTP流量
    port 443              # 捕获HTTPS流量
    src port 22           # 捕获SSH源流量
    dst port 53           # 捕获DNS查询流量
    
  4. 协议过滤

    bash
    复制
    tcp                   # 仅捕获TCP流量
    udp                   # 仅捕获UDP流量
    icmp                  # 仅捕获ICMP(ping)流量
    arp                   # 仅捕获ARP流量
    
  5. 组合条件

    bash
    复制
    tcp port 80 and host 192.168.1.100  # 捕获特定主机的HTTP流量
    not arp                             # 排除所有ARP流量
    src net 192.168.1.0/24 and not dst net 192.168.1.0/24  # 捕获来自本地子网但发往外部的流量
    

二、显示过滤器 (Display Filters)

在已捕获的数据中筛选显示结果

基本语法

bash
复制
协议.字段 运算符 值

常用运算符

运算符 说明 示例
== 等于 ip.src == 192.168.1.1
!= 不等于 tcp.port != 443
> 大于 frame.len > 100
< 小于 http.content_length < 500
>= 大于等于 tcp.window_size >= 8192
<= 小于等于 udp.length <= 128
contains 包含 http.host contains "google"
matches 正则匹配 http.request.uri matches "login.*"
and 逻辑与 ip.src==192.168.1.1 and tcp.flags.syn==1
or 逻辑或 dns or dhcp
not 逻辑非 !arp

常用过滤示例

  1. HTTP流量分析

    bash
    复制
    http                  # 显示所有HTTP流量
    http.request.method == "GET"  # 显示GET请求
    http.response.code == 404     # 显示404响应
    http.host contains "facebook" # 显示访问Facebook的流量
    
  2. TCP问题诊断

    bash
    复制
    tcp.analysis.retransmission  # 显示重传包
    tcp.analysis.zero_window     # 显示零窗口通告
    tcp.flags.reset == 1         # 显示RST包
    tcp.analysis.duplicate_ack   # 显示重复ACK
    
  3. DNS查询分析

    bash
    复制
    dns.qry.type == 1     # A记录查询
    dns.qry.name == "example.com"  # 特定域名查询
    dns.flags.response == 0  # 仅显示DNS查询
    
  4. 协议组合过滤

    bash
    复制
    (http or ssl) and ip.addr == 192.168.1.100  # 显示特定主机的HTTP/HTTPS流量
    icmp && icmp.type == 8   # 仅显示ICMP请求(ping)
    tcp.port == 3389 and rdp  # 显示RDP流量
    

三、实用技巧

  1. 保存常用过滤器

    • 在过滤器输入框输入条件后,点击右侧书签图标保存
    • 通过 Analyze > Display Filters 管理已保存的过滤器
  2. 右键快速过滤

    • 在数据包详情中选择字段 > 右键 > Apply as Filter
    • 示例:快速过滤特定TCP会话
      bash
      复制
      tcp.stream eq 12  # 显示整个TCP流
      
  3. 过滤表达式自动补全

    • 输入时按 Ctrl+Space 触发自动补全建议
    • 输入协议名后按 . 查看可用字段
  4. 语法着色

    • 绿色:有效表达式
    • 红色:语法错误
    • 黄色:类型不匹配

四、高级过滤

  1. 按字节偏移过滤

    bash
    复制
    frame[0:3] == 00:0c:29   # 匹配前3字节为特定MAC地址
    tcp[20:2] == 80:00       # 匹配TCP头部特定偏移量
    
  2. 位掩码过滤

    bash
    复制
    tcp.flags & 0x02 != 0    # 匹配SYN标志位
    icmp.type == 3 and icmp.code & 0x02 == 0x02  # 匹配特定ICMP代码
    
  3. 时间范围过滤

    bash
    复制
    frame.time >= "2023-01-01 09:00:00" 
    frame.time <= "2023-01-01 17:00:00"
    

五、故障排除

  1. 常见错误

    bash
    复制
    ip.src = 192.168.1.1    # 错误:应使用 == 而不是 =
    tcp.port = 80           # 错误:同上
    http.host == "example   # 错误:缺少闭合引号
    
  2. 验证过滤器

    • 无效表达式显示为红色背景
    • 使用 Analyze > Display Filter Expression 对话框构建验证
  3. 性能优化

    • 避免复杂正则表达式:matches ".*login.*"
    • 优先使用协议字段而非原始字节偏移
    • 捕获时使用捕获过滤器减少数据量

提示:Wireshark内置3000+过滤字段,可通过 Edit > Preferences > Protocols 查看各协议可用字段