2

我想获取所有捕获的数据包,其中源或目标 IP 地址不同于 192.168.0.1。为此,我尝试了 ip.addr != 192.168.0.1,但过滤器变为黄色,而不是绿色,所以一定有问题。

怎么能(正确地)做到这一点?

4

1 回答 1

6

6.4.4. 一个常见的错误

[警告]警告!在组合表达式上使用 != 运算符,例如:eth.addr、ip.addr、tcp.port、udp.port 等可能无法按预期工作!

人们通常使用过滤字符串来显示类似 ip.addr == 1.2.3.4 的内容,它将显示所有包含 IP 地址 1.2.3.4 的数据包。

然后他们使用 ip.addr != 1.2.3.4 查看所有不包含 IP 地址 1.2.3.4 的数据包。不幸的是,这并没有达到预期的效果。

相反,对于源或目标 IP 地址等于 1.2.3.4 的数据包,该表达式甚至是正确的。这样做的原因是表达式 ip.addr != 1.2.3.4 必须被读作“数据包包含一个名为 ip.addr 的字段,其值不同于 1.2.3.4”。由于 IP 数据报同时包含源地址和目标地址,因此只要两个地址中至少有一个与 1.2.3.4 不同,该表达式的计算结果就会为真。

如果您想过滤掉所有包含 IP 数据报的数据包进出 IP 地址 1.2.3.4,那么正确的过滤器是 !(ip.addr == 1.2.3.4),因为它显示“显示所有不是它的数据包确实存在一个名为 ip.addr 的字段,其值为 1.2.3.4”,或者换句话说,“过滤掉所有没有出现值为 1.2.3.4 的名为 ip.addr 的字段的数据包”。

来源

于 2013-09-03T20:19:30.537 回答