【问题标题】:Read Packet Content using pcap4j使用 pcap4j 读取数据包内容
【发布时间】:2020-07-19 03:35:18
【问题描述】:

我有下面的代码,它可以使用 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 响应的数据包内容。

【问题讨论】:

  • 你愿意使用 tshark,Wireshark 的命令行版本吗?这是 tshark 中的一个标志和一个显示过滤器,其中连续运行是默认行为。
  • @erdem-aydemir 这个问题是给你的。
  • @RossJacobs 不,老实说,我不了解网络和软件包。我的目标是理解 http 包并捕获 java 应用程序中的 http 正文和标头。我用aop。但我无法获得 http 响应正文。我不知道什么是wireshark等。
  • 如果您想使用不同的库,可以尝试使用 jNetPcap:javatutorial.net/capture-network-packages-java, nealvs.wordpress.com/2013/12/16/…

标签: java wireshark packet-sniffers sniffer pcap4j


【解决方案1】:

第一个问题:

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

关于第二个问题:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多