0

我正在使用 pcap4j 在 Java 中读取数据包。我想在收到带有中止的数据包时生成警报。现在我无法为中止应用过滤器。我在下面附上了代码。

    PcapHandle handle;
    Pcap pcap;
    handle = 

  Pcaps.openOffline("D://nm_postpaid_testing.pcap",TimestampPrecision.NANO);

    //handle.setFilter("tcap.reason == 11", BpfCompileMode.OPTIMIZE);
    System.out.println("Starting output: ");

    PcapPacket packet = null;


    String filter = "pcap abort 11";
    handle.setFilter(filter, BpfCompileMode.OPTIMIZE);
    PacketListener listener = new PacketListener() {
        @Override
        public void gotPacket(PcapPacket pp) {

            System.out.println("/////////////START////////////////");
            System.out.println(Arrays.toString(pp.getRawData()));

            SctpDecoder sctpDecoder = new SctpDecoder();

            //sctpDecoder.decode(pp.getRawData(), "IP", "*", true, "DECODE:TCAP");

            System.out.println("///////////////END//////////////\n");

        }
    };

    handle.loop(4, listener);

在此处输入图像描述

4

3 回答 3

0

捕获过滤器无效

捕获过滤器pcap abort 11无效(第 13 行)。你可以这样测试dumpcap -d -f "<filter>"

bash-5.0$ dumpcap -d -f "pcap abort 11"
Capturing on 'Wi-Fi: en0'
dumpcap: Invalid capture filter "pcap abort 11" for interface 'en0'.

That string isn't a valid capture filter (syntax error in filter expression: syntax error).
See the User's Guide for a description of the capture filter syntax.

如果有效,dumpcap 将显示过滤器的 BPF 指令。

您有一个tcap.reason == 11(第 7 行),它是有效的,您可能希望在适用的情况下重用它。

于 2019-09-16T18:38:46.940 回答
0

pcap abort 11不是有效的捕获/bpf 过滤器。

我没有使用 pcap4j 的经验,但从setFilter API 文档看来,它需要捕获/bpf 过滤器而不是显示过滤器。

显示和捕获过滤器之间的区别在这里解释。

据我所知,没有可用于过滤 TCAP Abort 消息的捕获/bpf 过滤器。

中止的有效显示过滤器是tcap.dialogueAbort_elementtcap.abort_source或者tcap.reason == 10 or tcap.reason == 11但我不知道如何将它们与 pcap4j 一起使用

pcap4j您的用例的替代方法是使用tsharkSharkd解码捕获,这两个程序都支持显示过滤器,并且 tshark 支持您可以在 Java 中轻松处理的 JSON ( -T json) 和 XML ( -T pdml) 输出格式。

于 2019-09-16T19:05:02.917 回答
0

pcap 库(libpcap/WinPcap/Npcap)可以完成的过滤非常有限;它无法测试任何像 TCAP 中止这样复杂的东西。您必须通过编写自己的代码或以某种方式使用 Wireshark/TShark/sharkd 的代码来详细剖析数据包,以确定您拥有的数据包是否是 TCP 中止。

于 2019-09-19T18:57:44.893 回答