0

作为普通用户验证 BPF 过滤器的最简单方法是什么?

我发现最简单的方法是使用一个小的 pcap 文件作为选项的输入来运行 tcpdump -r

$ tcpdump -r one_packet.pcap -F invalid_bpf.conf 2> /dev/null ; echo $?
1
$ tcpdump -r one_packet.pcap -F valid_bpf.conf 2> /dev/null ; echo $?
0

返回无效或有效 BPF 过滤器的标准错误代码。这要求我有一个 PCAP 文件作为输入提供。

有没有办法在没有 PCAP 文件或特殊权限的情况下进行这个简单的测试?

4

1 回答 1

1

如果您有一个带有支持转义序列的内置“echo”命令的外壳,那么执行此操作的一种有点反常的方法是

echo -en "\0324\0303\0262\0241\02\0\04\0\0\0\0\0\0\0\0\0\0377\0377\0\0\01\0\0\0"|\ 
    ./tcpdump -r - -F bpf.conf 2>/dev/null; echo $?

这在 OS X 10.8 上对我有用,它具有 bash 3.2.48(1)-release (x86_64-apple-darwin12)。

该“echo”命令写出一个短的 pcap 文件,其中没有数据包,并且链路层标头类型为DLT_EN10MB. 这将测试过滤器是否对以太网有效;有些过滤器对某些链路层报头类型有效,但对其他类型无效,例如“非广播”,它对以太网有效但对 PPP 无效,因此您需要选择一些链路层报头类型来测试时使用。

于 2014-03-18T20:10:19.420 回答