0

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 之前完成循环吗?

4

1 回答 1

1

我假设您在线程中运行代码。用于 SwingUtilities.invokeAndWait调用pcktTextArea.append()代码

于 2013-02-21T11:30:40.693 回答