【问题标题】:Libpcap: Packet Filtration at word levelLibpcap:字级别的数据包过滤
【发布时间】:2014-10-08 11:36:25
【问题描述】:

使用 Libpcap 我正在尝试在单词级别过滤数据包。例如,如果数据包有“Hello”一词,我想丢弃它。

我将如何为此编写表达式???

【问题讨论】:

    标签: libpcap jnetpcap


    【解决方案1】:

    我想我已经在 jNetPcap 论坛上回答了你,但为了确保,我也会在 SO 上发布我的答案。

    基本上这里有几种方法可以完成这种过滤。由于您没有具体说明您想要如何“过滤”,我将描述一种使用低级捕获过滤器和 java 中的过滤器的方法。

    捕获标题

    如果您只需要查看 tcp 有效负载 并且 知道应该出现“Hello”的偏移量,我会尝试使用 Wireshark 的捕获过滤器生成器 @ 987654321@ - 这允许您为 tcp 有效负载创建字符串匹配捕获过滤器。

    在您的示例中(假设 tcp 有效负载偏移量为 0),捕获过滤器(采用 bpf 语法)如下所示:

    not (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48656c6c && tcp[((tcp[12:1] & 0xf0) >> 2) + 4:1] = 0x6f)
    

    阅读链接页面上的说明以了解具体情况。注意:我添加了 "not" 是因为我们要丢弃与此过滤器匹配的数据包,而不是相反。

    您可以在 jNetPcap 中通过 Pcap 对象上的setFilter(PcapBpfProgram bpf) 使用此过滤器。

    如果您不想将自己限制在 tcp 有效负载和固定偏移量,则不能使用捕获过滤器,需要在 java 代码中过滤此数据包。

    Java 中的过滤

    一个例子是这个简单的 jnetpcap 数据包处理程序:

    public class PacketHandler implements PcapPacketHandler<Object> {
        @Override
        public void nextPacket(PcapPacket packet, Object unused) {
            StringBuilder str = new StringBuilder();
            /* 
             Convert the whole packet (headers + payloads) to a string.
             Adjust the first and last parameter if you don't want to look at the whole packet
             */
            packet.getUTF8String(0, str, packet.getTotalSize());
            String rawStringData = str.toString();
            if (rawStringData.contains("Hello")) {
                // we have found a packet that contains the text "Hello"
                return; // ignore it
            }
            // do something with the packet that does not contain "Hello"
        }
    }
    
    [...]
    // use packet handler
    pcap.loop(numberOfPackets, new PacketHandler(), null);
    

    如果您知道 "Hello" 的起始偏移量并且不想将整个数据包或有效负载转换为字符串,也可以尝试 getUTF8Char(index) 方法。

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 2011-02-05
      • 2021-08-27
      • 1970-01-01
      • 2013-05-23
      相关资源
      最近更新 更多