Wireshark过滤规则通过逻辑运算符与协议字段的灵活组合,可精准筛选目标数据包,显著提升网络分析效率。
以下是核心功能的详细解析:

【教程】Wireshark 过滤规则常见组合,助你轻松过滤复杂数据包

一、基础逻辑运算符

1. 与(and/&&)

  • 作用:要求多个条件同时满足。
  • 等价性and&&完全等效,可互换使用。
  • 示例:过滤源或目标IP为172.16.16.154且使用TCP 80端口的数据包:
    ip.addr == 172.16.16.154 and tcp.port == 80

    该规则同时匹配IP地址和端口条件,仅显示符合两者的数据包。

2. 或(or/||)

  • 作用:多个条件中至少满足一个。
  • 等价性or||可互换。
  • 示例:筛选IP为192.168.22.230192.168.22.145的数据包:
    ip.addr == 192.168.22.230 || ip.addr == 192.168.22.145

    该规则匹配任一IP地址的数据包,适用于多设备通信场景。

二、运算符优先级与括号使用

  • 优先级顺序not(非)>and/&&(与)>or/||(或)。
  • 括号作用:强制改变运算顺序,避免歧义。
  • 示例:先筛选IP为192.168.22.230192.168.22.145,再过滤TCP端口小于23的数据包:
    (ip.addr == 192.168.22.230 or ip.addr == 192.168.22.145) and tcp.port < 23

    括号确保先执行or运算,再执行and运算,精准定位特定IP设备的低端口通信。

三、使用场景与典型规则

1. 协议级过滤

  • HTTP/HTTPS流量
    http or https

    直接通过协议名称筛选,适用于分析Web通信。

2. 多协议端口组合

  • IP为10.0.0.1且使用SSH(TCP 22)或DNS(UDP 53)
    ip.addr == 10.0.0.1 && (tcp.port == 22 || udp.port == 53)

    结合IP地址与端口逻辑,快速定位特定设备的服务通信。

3. 排除特定条件

  • IP为192.168.1.1且非80端口
    ip.addr == 192.168.1.1 and not tcp.port == 80

    使用not运算符排除常见端口,聚焦非Web流量。

4. 方向与端口细分

  • 源端口为22的SSH流量
    tcp.srcport == 22

    仅显示主动发起SSH连接的数据包,适用于追踪客户端行为。

四、进阶技巧与注意事项

1. 协议字段深度过滤

  • DNS请求与响应
    dns.flags.response == 0  # 请求包
    dns.flags.response == 1  # 响应包

    通过DNS标志位区分通信方向,辅助故障排查。

2. 位级过滤

  • 筛选URG标志置位的TCP报文
    tcp(13) & 32 == 32

    利用二进制位运算识别异常流量,常用于安全分析。

3. 性能优化

  • 捕获过滤(Capture Filter)
    tcp port 443 and host 192.168.1.100

    在抓包前过滤,减少无关数据存储,适合高流量场景。

4. 语法规范

  • 大小写无关ANDOR等写法均有效,但推荐小写以提升可读性。
  • 括号消除歧义:避免a and b or c的模糊表达,建议明确分组如(a and b) or c

五、典型案例与效率提升

1. 故障排查

  • HTTP登录请求追踪
    http.request.method == "POST" and http contains "login"

    快速定位用户登录行为,结合时间戳分析响应延迟。

2. 安全监控

  • 隐蔽扫描检测
    tcp.flags.syn == 1 and tcp.flags.ack == 0 and tcp.window_size < 1024

    识别异常SYN包,防范网络攻击。

通过合理组合逻辑运算符、协议字段与高级技巧,Wireshark过滤规则可精准定位复杂网络环境中的关键数据,显著提升分析效率。建议结合具体场景灵活运用,并通过官方文档(如pcap-filter手册)进一步探索细分协议的过滤方法。