私は現在、イーサネット接続を介して送信されるデータを追跡および解釈するのに役立つ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)ファイルで特定のパケットを検索する効率的な方法を開発しようとしています。私はネットを精査しましたが、私が求めていることを完全に実行できるものを見つけることができませんでした。
誰かがあなたが提案できるアイデア/解決策を持っているなら、それは大いにありがたいです。
ありがとう!