如何使用 BPF 按数据过滤
how to filter by data using BPF
我正在尝试使用 bpf 语法过滤 pcap 文件。我只需要 return 来自 HTTP 的 GET 请求,其中包含 GET 请求中的特定单词,是否可以这样做?我设法从 HTTP 获取 GET 请求,但找不到如何根据数据包的数据进行过滤。
除非 Wireshark 或 TCPDump 没有针对您正在使用的某些奇怪协议的协议解析器,否则您被要求做的事情很棘手、困难且不切实际。
仅使用 BPF 获取 GET 请求的方法如下:
dst port 80 and tcp[(tcp[12]>>2):4]=0x47455420
必须以这种方式完成的原因是您必须考虑更改 TCP 选项的可能性,并因此更改数据偏移开始的位置。这会找出数据的开始位置并检查字符串 "GET ".
的前四个字节
您可能还注意到,我在字节 12 中使用了 TCP 数据偏移值的快捷方式。这样做会更好:
(tcp[12]>>4)*4
或者这个:
(tcp[12]&0xf0 >> 2)
这将考虑启用保留的低半字节中的任何位。
现在回答已经晚了,但无论如何。
您可以使用 BPF 过滤 GET 或任何其他 HTTP 请求。
bpfcc-tools 中的 next example 显示了类似的任务实现。它应该在实时网络接口上工作,而不是 pcap 文件。但我希望你能采纳它应用在文件上。
我正在尝试使用 bpf 语法过滤 pcap 文件。我只需要 return 来自 HTTP 的 GET 请求,其中包含 GET 请求中的特定单词,是否可以这样做?我设法从 HTTP 获取 GET 请求,但找不到如何根据数据包的数据进行过滤。
除非 Wireshark 或 TCPDump 没有针对您正在使用的某些奇怪协议的协议解析器,否则您被要求做的事情很棘手、困难且不切实际。
仅使用 BPF 获取 GET 请求的方法如下:
dst port 80 and tcp[(tcp[12]>>2):4]=0x47455420
必须以这种方式完成的原因是您必须考虑更改 TCP 选项的可能性,并因此更改数据偏移开始的位置。这会找出数据的开始位置并检查字符串 "GET ".
的前四个字节您可能还注意到,我在字节 12 中使用了 TCP 数据偏移值的快捷方式。这样做会更好:
(tcp[12]>>4)*4
或者这个:
(tcp[12]&0xf0 >> 2)
这将考虑启用保留的低半字节中的任何位。
现在回答已经晚了,但无论如何。 您可以使用 BPF 过滤 GET 或任何其他 HTTP 请求。 bpfcc-tools 中的 next example 显示了类似的任务实现。它应该在实时网络接口上工作,而不是 pcap 文件。但我希望你能采纳它应用在文件上。