Я прослушиваю определенную сетевую карту и перехватываю пакеты TCP (только TCP) с помощью библиотеки jPcap. Однако мне нужны целые сеансы TCP, а не отдельные пакеты.
В Wireshark я могу выбрать «следить за потоком tcp», чтобы получить весь разговор от начала до конца. Я хочу сделать именно это на 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));
}
}
}