如何在PCAP上应用中止过滤器?

时间:2019-09-16 10:26:50

标签: wireshark packet pcap ss7

我正在使用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);

enter image description here

3 个答案:

答案 0 :(得分: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行),该密码有效,并且您可能希望在适用的情况下重复使用它。

答案 1 :(得分:0)

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

我没有使用pcap4j的经验,但是从setFilter API documentation开始,它似乎希望使用捕获/ bpf过滤器,而不是显示过滤器。

here说明了显示过滤器和捕获过滤器之间的区别。

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

中止的有效显示过滤器为tcap.dialogueAbort_elementtcap.abort_sourcetcap.reason == 10 or tcap.reason == 11,但我不知道如何将其与pcap4j一起使用

对于您的用例,pcap4j的另一种选择是使用tsharksharkd解码捕获,这两个程序都支持显示过滤器,而tshark支持JSON(-T json)和您可以在Java中轻松处理的XML(-T pdml)输出格式。

答案 2 :(得分:0)

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