【问题标题】:How to apply abort filter on PCAP?如何在 PCAP 上应用中止过滤器?
【发布时间】:2020-01-17 04:14:14
【问题描述】:

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

【问题讨论】:

标签: wireshark packet pcap ss7


【解决方案1】:

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

【讨论】:

  • 你能解释一下什么是tshark或sharkd吗?
  • 它们是 Wireshark 附带的程序。
【解决方案2】:

捕获过滤器无效

捕获过滤器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 行),您可能希望在适用的情况下重复使用它。

【讨论】:

  • tcap.reason == 11 在wire-shark中工作,但它在我的代码中给出了以下错误。 Exception in thread "main" org.pcap4j.core.PcapNativeException: Error occurred in pcap_compile: can't parse filter expression: syntax error
  • 这听起来像是 pcap4j 的问题。如果您的库意外出错,我可能会接受@VasilVelichkov 的建议,尝试使用 tshark 或 Sharkd。
【解决方案3】:

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

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

here 中解释了显示过滤器和捕获过滤器之间的区别。

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

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

对于您的用例,pcap4j 的替代方法可以是使用tsharksharkd 解码捕获,这两个程序都支持显示过滤器,tshark 支持 JSON (-T json) 和 XML (-T pdml) 输出格式你可以很容易地用 Java 处理。

【讨论】:

  • 我会试试这个。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2012-07-25
  • 2011-05-20
  • 1970-01-01
  • 2022-11-23
  • 2014-09-28
  • 2012-07-12
  • 1970-01-01
  • 2016-11-20
相关资源
最近更新 更多