2012-08-15 47 views

回答

0

wireshark能夠顯示(並捕獲)數據。我會研究jnetpcap。

編輯:我查了教程(http://jnetpcap.com/tutorial/usage)。請參閱第72行(創建返回對象)和108-112(填充並讀取返回對象)。

2

jnetpcap團隊聲明「儘管這些是本機C庫教程,但您會發現調用的過程和順序幾乎完全相同,如果您知道C語言和Java語言,那麼翻譯這些應該不會有太大麻煩「對於java和jNetPcap API的教程」這就是說,看看this非常深入的教程,jnetpcap團隊在他們的網站上推薦。

看看接近尾聲,下的實際嗅探,教程勾畫出內存中的數據包的內容,告訴你什麼地方去找找IP報頭。

其他的解決方案:

如果你能得到一個PCAP文件,你應該能夠使用本地DatagramPacket類適合您的需求。 DatagramPacket有一個名爲getSocketAddress()的方法,它將爲您提供IP地址和端口號。

+0

它現在有用謝謝:) – 2012-08-15 17:53:47

+0

@AJ:沒問題,請接受我的回答,如果你發現它最有幫助。如果遇到問題:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – CODe 2012-08-15 22:52:49

1
PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() { 

     final Tcp tcp=new Tcp(); 

    final Ip4 ip = new Ip4(); 

       public void nextPacket(PcapPacket packet, String user) { 


        final Tcp tcp=new Tcp(); 
         if(packet.hasHeader(tcp)){ 
         if(packet.hasHeader(ip)){ 

         packet.getHeader(tcp); 
         System.out.printf("Received packet at %s caplen=%-4d len=%-4d %s %s\n", 
         new Date(packet.getCaptureHeader().timestampInMillis()), 
         packet.getCaptureHeader().caplen(), // Length actually captured 
         packet.getCaptureHeader().wirelen(), // Original length 
         user,FormatUtils.ip(ip.source())        // User supplied object 
         ); 
         //JBuffer buffer = packet; 
         //int size=packet.size(); 
         byte[] arr=packet.getByteArray(0, packet.size()); 

        }}} 

      };