首页/网络/抓包与流量分析速查/Wireshark 按 IP 地址过滤
Wireshark 技巧75 条

Wireshark 按 IP 地址过滤

ip.addr 匹配网络层任一方向地址,ip.src / ip.dst 限定方向;IPv6 对应 ipv6.addr / ipv6.src / ipv6.dst。

ip.addr 在做什么

ip.addr 是 Wireshark 里最常用的地址字段,匹配网络层任一方向上出现过的地址;ip.src 与 ip.dst 用来限定方向,IPv6 对应 ipv6.addr、ipv6.src、ipv6.dst。它匹配的是报文里实际出现的地址,NAT 或代理前后看到的值不同,所以跨设备分析前要先确认抓包点在链路哪一侧。网段匹配写 CIDR 前缀,例如 ip.addr == 10.0.0.0/24。ARP 与部分隧道外层没有 IPv4 头,用这个字段会整类漏掉。

基本信息

双向匹配ip.addr == 10.0.0.9
方向限定ip.src == A / ip.dst == B
IPv6ipv6.addr / ipv6.src / ipv6.dst
集合写法ip.addr in {10.0.0.9, 10.0.0.10}
网段写法ip.addr == 10.0.0.0/24,不能用 contains

典型使用场景

  • 只看一台客户端与所有服务端的往来:ip.addr == 10.0.0.9
  • 只看单向 A 发往 B:ip.src == A && ip.dst == B
  • 筛整个业务网段:ip.addr == 10.10.0.0/16
  • 排除监控与健康检查来源的噪音:!(ip.addr == 10.0.0.5)
  • 双栈环境核对 IPv6 路径:ipv6.addr == 2001:db8::10

常用示例

常用示例
ip.addr == 10.0.0.9                       # 与该主机的全部往来
ip.src == 10.0.0.9 && ip.dst == 10.0.0.20 # 只看单向 A 发往 B
ip.addr == 10.0.0.0/24                    # 整个网段
ip.addr in {10.0.0.9, 10.0.0.10}          # 多台设备一起看
!(ip.addr == 10.0.0.5)                    # 排除某台主机
ipv6.addr == 2001:db8::10                 # IPv6 地址
ip.addr == 10.0.0.9 && tcp.port == 443    # 与端口条件叠加
ip.addr == 172.16.0.0/12 && !dns          # 内网流量里排除 DNS 查询

方向组合含义

表达式含义使用提示
ip.addr == A源或目的任一为 A抓与 A 的全部往来,最保险的起手式
ip.src == A && ip.dst == B只有 A 发往 B判断请求方向用它;看回包要反写源与目的
ip.addr == 10.0.0.0/24按 CIDR 前缀匹配网段写成 contains 或省略前缀长度都得不到预期结果
ip.addr in {A, B}多地址集合匹配多台设备对照时的简写方式
!(ip.addr == A)排除该地址否定要连括号一起写,直接写 !ip.addr == A 语义可能相反
ipv6.addr == 2001:db8::10IPv6 地址匹配双栈环境里两个地址族都要单独查一遍
地址比较是精确相等,不是包含。想按域名筛选,要么先用 nslookup 解析出地址,要么在首选项里启用名称解析,代价是每个地址都会触发一次反查。
否定条件务必写成 !(ip.addr == A)。缺括号时表达式会被解析成对字段本身取反,在大文件上可能返回空结果而不报错,让人误以为没有流量。

典型组合

典型组合
ip.addr == 10.0.0.9 && tcp.port == 443 && tcp.flags.syn == 1   # 该主机的建连请求
ip.src == 10.0.0.9 && tcp.analysis.flags                      # 它发出的异常包
ip.addr == 10.0.0.0/24 && !dns && !arp                        # 网段内的业务流量
ip.addr == 10.0.0.9 && http.response.code >= 500              # 它收到的服务端错误

与其他字段配合

  • 与 tcp.stream 组合可以把一台主机的多条会话拆开逐条看,定位是哪条连接出了问题
  • 与 frame.time_relative 组合可切出故障发生的那段时间窗,避免被前后正常流量干扰
  • 与 tcp.analysis.flags 组合能立刻看出该主机参与的传输异常,是排障的高频组合
  • 与 dns 组合可判断某台主机的解析行为是否异常,例如是否存在大量失败查询

常见场景表达式

场景表达式判读要点
某台客户端访问全部服务ip.addr == 10.0.0.9先看它都连了哪些目的地址,再逐个深入哪条不通
两个地址之间的单向流量ip.src == A && ip.dst == B只看请求方向,回包要用相反的源与目的再看一遍
只看内网某网段ip.addr == 10.10.0.0/16注意排除 DNS 与健康检查才能看清业务流量
排除已知噪音来源!(ip.addr == 10.0.0.5)否定必须连括号一起写,否则语义不同
双栈主机按 IPv6 查ipv6.addr == 2001:db8::10IPv4 与 IPv6 是两套字段,要分别筛
查找某地址参与的异常ip.addr == A && tcp.analysis.flags异常标注是启发式结果,仍需回到序列号确认
把一台主机的地址当作分析起点很高效:先统计它参与了哪些会话(Statistics 会话列表),再对可疑的那条叠加 tcp.stream 深入,比逐条翻报文快得多。
地址字段也是拼装复杂条件的基础:先按主机收窄范围,再叠加端口、标志位或协议字段,逐层收窄比一开始就写一长串条件更容易排查表达式本身的问题。

易错点

  • ARP 与部分隧道外层没有 IPv4 地址,用 ip.addr 过滤会整类漏掉,需要单独用 arp 或对应协议字段
  • NAT 与代理场景下同一会话两端看到不同地址,跨设备对照前必须先确认抓包点位置
  • 把 IPv6 地址写进 ip.addr 会匹配不到任何包,必须改用 ipv6.addr
  • 网段匹配要用 == 加前缀长度,写成 contains 或省略掩码都会得到错误结果
  • 主机名写法依赖名称解析,解析失败时静默匹配不到,排障统一用 IP 更稳

数据来源与参考

  • Wireshark 显示过滤器参考(ip.addr)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌