我目前正在用 java 开发一个工具,它将帮助跟踪和解释通过以太网连接发送的数据。我已经成功开发了数据包嗅探器和数据包数据解释器。
尝试导航到跟踪文件中的特定数据包时遇到问题。每个数据包都有一个相关的时间戳,我希望能够导航到特定的时间窗口。我目前的方法如下。
public ArrayList<Packet> getTimeWindow(double time, int window) {
ArrayList<Packet> packets = new ArrayList<Packet>();
double start = time - window;
double end = time + window;
JpcapCaptor captor = null;
try {
captor = JpcapCaptor.openFile(this.traceFile);
} catch (IOException e) {e.printStackTrace();}
Packet p = captor.getPacket();
while(packet != null) {
if(f.timestamp > end) return packets;
if(p.timestamp >= start) packets.add(p);
packet=captor.getPacket();
}
return packets;
}
这适用于小跟踪,但当我们处理数百万个数据包时会变得非常慢。我想实现某种形式的二进制搜索算法,但我想不出一种方法来导航到数据包的中间而不对其进行预处理。数据包没有按行整齐地组织,即使我跳到文件中的一个随机点,我也不能保证我在一个数据包的开头。
总之:我正在寻找一种有效的方法来搜索捕获(.pcap 或 .cap)文件中的特定数据包。我已经搜遍了网络,但我找不到任何可以完全满足我要求的东西。
如果有人有您可以提出的任何想法/解决方案,将不胜感激。
谢谢!