我正在使用 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();
}
}
我尝试删除过滤器表达式以捕获文件中的所有数据包,但这并没有改变任何内容。有时,代码从文件中捕获数据包,有时,即使文件充满数据包,它也不会捕获任何数据包。
我注意到的一件事是,有时代码在第一次尝试时就会从文件中捕获数据包,而其他时候我必须多次重新运行代码才能获得结果。
任何有关解决此问题的帮助将不胜感激。预先感谢您!
我有一段时间遇到同样的问题了。不幸的是,我不知道发生了什么变化(也许从 winpcap 迁移到 npcap)。
@elnino17:你使用的是winpcap还是npcap?