特定のネットワーク カードをリッスンし、jPcap ライブラリを使用して TCP (TCP のみ) パケットをキャプチャしています。ただし、個々のパケットではなく、TCP セッション全体が必要です。
Wireshark では、「follow tcp stream」を選択できるため、会話全体を最初から最後まで取得できます。私はまさにそれをJavaでやりたいと思っています。これらのパケットをリアルタイムで再構築するにはどうすればよいですか? ネットワークカードをリッスンし、新しいパケットをキャプチャしながら、TCP セッションを再構築したいと考えています。どうすればこれを達成できますか?パケットをキャプチャするコードは次のとおりです。
jpcap.NetworkInterface[] devices = JpcapCaptor.getDeviceList();
JpcapCaptor captor = JpcapCaptor.openDevice(devices[1], 65535, true, 1000);
JpcapWriter writer = JpcapWriter.openDumpFile(captor, "myNetworkDump");
captor.loopPacket(-1, new PacketPrinter(writer));
class PacketPrinter implements PacketReceiver {
private HashMap<Long, ArrayList<Packet>> sessions;
private BufferedWriter out;
private JpcapWriter writer;
Map<Long, TCPBodyData> bodies = new HashMap<Long, TCPBodyData>();
public PacketPrinter(JpcapWriter writer) {
this.writer = writer;
this.sessions = new HashMap<Long, ArrayList<Packet>>();
}
public void receivePacket(Packet packet) {
System.out.println(packet);
if (packet instanceof TCPPacket) {
TCPPacket tcppacl = (TCPPacket) packet;
byte[] body = addBodyData(tcppacl);
// System.out.println(new String(body));
}
}
}