JnetPcap pcap.loop问题

问题描述 投票:0回答:1

我正在使用 JNetPcap 从 Java 中的 pcap 文件捕获数据包。该代码有时工作正常,但有时即使 pcap 文件充满数据包,它也不会捕获任何数据包。 这是我的代码:

import org.jnetpcap.Pcap;
import org.jnetpcap.PcapPacket;
import org.jnetpcap.PcapPacketHandler;

public class OfflinePcapCapture {
    public static void main(String[] args) {
        String pcapFilePath = "path/to/pcap/file";
        StringBuilder errorBuffer = new StringBuilder();
        Pcap pcap = Pcap.openOffline(pcapFilePath, errorBuffer);
        if (pcap == null) {
            System.err.println("Error opening pcap file: " + errorBuffer.toString());
            return;
        }

        // Setting filter to capture only TCP packets
        String filter = "tcp";
        if (pcap.setFilter(filter, Pcap.MODE_FILTER) != Pcap.OK) {
            System.err.println("Error setting filter expression: " + pcap.getErr());
            pcap.close();
            return;
        }

        PcapPacketHandler<String> packetHandler = new PcapPacketHandler<String>() {
            public void nextPacket(PcapPacket packet, String user) {
                System.out.println(packet.toString());
            }
        };

        int packetCount = pcap.loop(-1, packetHandler, "");
        if (packetCount < 0) {
            System.err.println("Error capturing packets: " + Pcap.getErr(pcap));
        } else {
            System.out.println("Captured " + packetCount + " packets from " + pcapFilePath);
        }

        pcap.close();
    }
}

我尝试删除过滤器表达式以捕获文件中的所有数据包,但这并没有改变任何内容。有时,代码从文件中捕获数据包,有时,即使文件充满数据包,它也不会捕获任何数据包。

我注意到的一件事是,有时代码在第一次尝试时就会从文件中捕获数据包,而其他时候我必须多次重新运行代码才能获得结果。

任何有关解决此问题的帮助将不胜感激。预先感谢您!

java networking pcap jnetpcap
1个回答
0
投票

我有一段时间遇到同样的问题了。不幸的是,我不知道发生了什么变化(也许从 winpcap 迁移到 npcap)。

@elnino17:你使用的是winpcap还是npcap?

© www.soinside.com 2019 - 2024. All rights reserved.