【发布时间】:2020-07-19 03:35:18
【问题描述】:
我有下面的代码,它可以使用 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();
}
所以我有两个问题:
- 如何捕获 HTTP 请求和响应并将其打印在控制台上。
- 如何让 java 代码连续运行,以便不断捕获数据包。
我确实检查了 pcap4j 文档,但不确定如何读取可以读取 HTTP 请求和 HTTP 响应的数据包内容。
【问题讨论】:
-
你愿意使用 tshark,Wireshark 的命令行版本吗?这是 tshark 中的一个标志和一个显示过滤器,其中连续运行是默认行为。
-
@erdem-aydemir 这个问题是给你的。
-
@RossJacobs 不,老实说,我不了解网络和软件包。我的目标是理解 http 包并捕获 java 应用程序中的 http 正文和标头。我用aop。但我无法获得 http 响应正文。我不知道什么是wireshark等。
-
如果您想使用不同的库,可以尝试使用 jNetPcap:javatutorial.net/capture-network-packages-java, nealvs.wordpress.com/2013/12/16/…
标签: java wireshark packet-sniffers sniffer pcap4j