我JNetPcap
对它很陌生,我仍在寻找解决方法,我正在尝试为我的项目构建一个数据包嗅探器,最近我正在尝试通过将我JTextArea
的信息附加到 a 中来打印数据包信息pcap.loop()
使用,但是当我使用特定整数值设置第一个参数时,假设 5pcap.loop()
输出已捕获的 5 个数据包,现在我想要的是连续捕获并输出数据包,直到我按下按钮停止。下面的语法显示了数据包处理程序。
PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {
public void nextPacket(PcapPacket packet, String user) {
// System.out.printf is included to check if my code works in a non GUI fashion
System.out.printf("Received packet at %s caplen=%-4d len=%-4d %s\n",
new Date(packet.getCaptureHeader().timestampInMillis()),
packet.getCaptureHeader().caplen(), // Length actually captured
packet.getCaptureHeader().wirelen(), // Original length
user // User supplied object
);
Date a = new Date(packet.getCaptureHeader().timestampInMillis());
int b = packet.getCaptureHeader().caplen();
int c = packet.getCaptureHeader().wirelen();
String d = user;
pcktTextArea.append("Received packet at " + a + " caplen=" + Integer.toString(b) + " len=" + Integer.toString(b) + user + "\n" );
pcktTextArea.setForeground(Color.red);
pcktTextArea.setFont(font);
}
};
现在这里是我的 pcktTextArea,我用它append
来打印出 textarea 中的信息:
pcktTextArea.append("Received packet at " + a + " caplen=" + Integer.toString(b) + " len=" + Integer.toString(b) + user + "\n" );
pcktTextArea.setForeground(Color.red);
pcktTextArea.setFont(font);
最后Pcap.loop
,我遇到了麻烦,如果我用 let say 5 替换它,它确实会打印在其中,JTextArea
但是当我放置Pcap.LOOP_INFINTE
它时,它只通过控制台打印信息,而不是在 GUI JTextArea 中打印信息:
int i = Pcap.LOOP_INFINITE;
pcap.loop(i , jpacketHandler, " ");
/***************************************************************************
* Last thing to do is close the pcap handle
**************************************************************************/
pcap.close();
是因为它必须在将信息打印到 Textarea 之前完成循环吗?