【问题标题】:how to filter by data using BPF [closed]如何使用 BPF 按数据过滤 [关闭]
【发布时间】:2017-12-02 09:38:17
【问题描述】:

我正在尝试使用 bpf 语法过滤 pcap 文件。我需要它只返回来自 HTTP 的 GET 请求,其中包含 GET 请求中的某个单词,是否可以这样做?我设法从 HTTP 获取 GET 请求,但我找不到如何按数据包的数据进行过滤。

【问题讨论】:

  • “btf”是指 BPF 吗?使用 BPF 不会有任何乐趣。您是否有不能使用显示过滤器的原因?
  • @DavidHoelzer 是的,我的意思是 BPF,我需要它的原因是因为我得到了一个仅使用 BPF 的任务
  • 除非你知道字符串总是在同一个位置,否则这将是非常痛苦的。我举个例子吧。
  • @DAvidHoelzer 我刚刚检查过,我正在寻找的字符串一直在同一个位置,请求看起来像这样:GET /xxxx/TheStringIamLookingFor/.....
  • @DavidHoelzer 非常感谢!

标签: filtering wireshark pcap tcpdump


【解决方案1】:

除非 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)

这将解释启用的保留低半字节中的任何位。

【讨论】:

    【解决方案2】:

    答案已经晚了,但无论如何。 您可以使用 BPF 过滤 GET 或任何其他 HTTP 请求。 来自 bpfcc-tools 的 next example 显示了类似的任务实现。它应该适用于实时网络接口,而不是 pcap 文件。但我希望你能把它应用到一个文件上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 2013-11-18
      • 2021-05-28
      • 2013-06-18
      • 2017-08-24
      相关资源
      最近更新 更多