我正在监听一个特定的网卡并使用 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));
}
}
}