gpt4 book ai didi

java - 使用 jPcap 在 Java 中重建实时 TCP session

转载 作者:可可西里 更新时间:2023-11-01 02:32:08 25 4
gpt4 key购买 nike

我正在监听特定的网卡并使用 jPcap 库捕获 TCP(只是 TCP)数据包。但是,我需要整个 TCP session ,而不是单个数据包。

在 Wireshark 中,我可以选择“follow tcp stream”,这样我就可以从头到尾看到整个对话。我想在 Java 中完全做到这一点。我如何实时重建这些数据包?我想在监听网卡和捕获新数据包的同时重建 TCP session 。我怎样才能做到这一点?这是我捕获数据包的代码:

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));
}
}
}

最佳答案

我不太了解 jPcap(我记得在某处读过 - here 你应该使用 jNetPcap)但我会使用 HashMap<String,TCPPacket>根据存储 session 的 tcp session ,String键是例如 String.join('.',remotehost_tcp_address,remote_host_tcp_port) ,然后等待 RST 或 FIN-FIN+ACK-ACK 序列将其删除。

请注意,如果您的系统遇到沉重的网络负载,这可能是一项代价高昂的操作,并且您可能还希望观察超时的对话。

关于java - 使用 jPcap 在 Java 中重建实时 TCP session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com