我有下面的代码,它可以使用pcap4j从接口捕获数据包,但我不确定如何打印请求和数据包中的响应数据。例如,如果我从邮递员那里打了一个REST电话,那么我想要跟踪请求和响应。这和Wireshark一样。我被困在最后一部分,我能够捕获包,但不确定如何读取包内容,我可以打印在控制台上。
try {
InetAddress addr = InetAddress.getByName("10.227.178.25");
PcapNetworkInterface device = Pcaps.getDevByAddress(addr);
System.out.println("You chose: " + device);
int snapshotLength = 64 * 1024; // in bytes
int readTimeout = 50; // in milliseconds
final PcapHandle handle;
handle = device.openLive(snapshotLength, PromiscuousMode.PROMISCUOUS, readTimeout);
String filter = "tcp port 80";
handle.setFilter(filter, BpfCompileMode.OPTIMIZE);
// Create a listener that defines what to do with the received packets
PacketListener listener = new PacketListener() {
@Override
public void gotPacket(Packet packet) {
// Override the default gotPacket() function and process packet
System.out.println(handle.getTimestamp());
System.out.println(packet);
byte[] b = packet.getRawData();
Packet p = packet.getPayload();
}
};
// Tell the handle to loop using the listener we created
try {
int maxPackets = 50;
handle.loop(maxPackets, listener);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Cleanup when complete
handle.close();
}catch(Exception e) {
e.printStackTrace();
}所以我有两个问题:
我确实检查了pcap4j文档,但不确定如何读取数据包内容,以便读取HTTP和HTTP。
发布于 2021-12-29 01:10:30
关于第一个问题:
如果将maxPackets设置为-1,它将持续运行。您可以从官方示例中看到许多这样的实现。
至于第二个问题:
目前,官方库不支持Http数据包。您需要自己手动实现它。您可以检查https://github.com/kaitoy/pcap4j/issues/85.
https://stackoverflow.com/questions/62975959
复制相似问题