我需要一个捕获过滤器来查找一个4字节的机器ID,该ID可能会出现在UDP有效负载的多个位置。具体来说,
udp[18:4]==0x76123AA6 or udp[20:4]==0x76123AA6 or udp[25:4]==0x76123AA6
使用此过滤器进行实验确实会找到一些所需的数据包,但是如果使用上述过滤器,某些数据包将无法按预期方式通过过滤器。
BPF解释器的无环规则是否可以防止这种多重匹配过滤?
答案 0 :(得分:0)
我发现我似乎缺少一些数据包的原因:搜索模式必须按顺序列出在捕获过滤器中。
例如,此过滤器可能会丢失某些数据包:
udp[18:4]==0x12345678 or udp[24:4]==0x12345678 or udp[20:4]==0x12345678
因为最后一个模式(20:4)的范围比更早的模式(24:4)在数据中更晚。
为了按预期工作,必须这样编写过滤器:
udp[18:4]==0x12345678 or udp[20:4]==0x12345678 or udp[24:4]==0x12345678
毫无疑问,我在原始问题中正确地写出了过滤器;我的代码的过滤器格式错误。