Java 使用pcap4j读取数据包内容

Java 使用pcap4j读取数据包内容,java,wireshark,packet-sniffers,sniffer,pcap4j,Java,Wireshark,Packet Sniffers,Sniffer,Pcap4j,我有下面的代码,可以使用pcap4j从接口捕获数据包,但我不确定如何打印数据包中的请求和响应数据。例如,如果我从邮递员那里打了一个REST电话,那么我想跟踪请求和响应。这与Wireshark相同。我被困在最后一部分,我能够捕获数据包,但不确定如何读取可以在控制台上打印的数据包内容 try { InetAddress addr = InetAddress.getByName("10.227.178.25"); PcapNetwo

我有下面的代码,可以使用pcap4j从接口捕获数据包,但我不确定如何打印数据包中的请求和响应数据。例如,如果我从邮递员那里打了一个REST电话,那么我想跟踪请求和响应。这与Wireshark相同。我被困在最后一部分,我能够捕获数据包,但不确定如何读取可以在控制台上打印的数据包内容

try {
        
        InetAddress addr = InetAddress.getByName("10.227.178.25");
        PcapNetworkInterface device = Pcaps.getDevByAddress(addr);
        
        System.out.println("You chose: " + device);
        
        int snapshotLength = 64 * 1024; // in bytes   
        int readTimeout = 50; // in milliseconds                   
        final PcapHandle handle;
        handle = device.openLive(snapshotLength, PromiscuousMode.PROMISCUOUS, readTimeout);
        String filter = "tcp port 80";
        handle.setFilter(filter, BpfCompileMode.OPTIMIZE);
        // Create a listener that defines what to do with the received packets
        PacketListener listener = new PacketListener() {
            @Override
            public void gotPacket(Packet packet) {
                // Override the default gotPacket() function and process packet
                System.out.println(handle.getTimestamp());
                System.out.println(packet);
                byte[] b = packet.getRawData();
                Packet p = packet.getPayload();
               
                
            }
        };

        // Tell the handle to loop using the listener we created
        try {
            int maxPackets = 50;
            handle.loop(maxPackets, listener);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // Cleanup when complete
        handle.close();
        
    }catch(Exception e) {
        e.printStackTrace();
    }
所以我有两个问题:

  • 如何捕获HTTP请求和响应并在控制台上打印它
  • 我如何让java代码连续运行,使其不断捕获数据包

  • 我确实检查了pcap4j文档,但不确定如何读取数据包内容,以便读取HTTP请求和HTTP响应。

    您是否愿意使用tshark,wireshark的命令行版本?这是tshark中的一个标志和一个显示过滤器,其中连续运行是默认行为。@erdem aydemir这个问题是给你的。@RossJacobs不,老实说,我不知道网络和软件包。我的目标是理解http包并捕获java应用程序中的http主体和头。我使用aop。但我无法获取http响应体。我不知道什么是wireshark等。如果您想使用不同的库,可以尝试使用jNetPcap:,