6

我有下面的代码,它可以使用 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();
    }

所以我有两个问题:

  1. 如何捕获 HTTP 请求和响应并将其打印在控制台上。
  2. 我怎样才能让 java 代码连续运行,以便它继续捕获数据包。

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

4

1 回答 1

0

对于第一个问题:

如果将 [maxPackets] 设置为 -1,它将连续运行。你可以从官方 Sample 中看到很多这样的实现。

至于第二个问题:

目前官方库不支持 Http Packet。您需要自己手动实现。您可以查看https://github.com/kaitoy/pcap4j/issues/85

于 2021-12-29T01:10:30.243 回答