簡體   English   中英

嗅探局域網:Jpcap java程序似乎只能抓住我的數據包

[英]Sniffing a LAN : Jpcap java program only seems to catch my packets

我必須創建一個程序來嗅探學校的本地網絡。 我選擇使用Java並發現可以使用jpcap捕獲數據包。 所以我想按照jpcap的github中提供的一個示例,似乎我只能找到自己的數據包。

就像我說的,我看了代碼並選擇了我的wifi界面。 該程序正在捕獲數據包,我將所有源IP地址放在一個文本文件中運行一些測試。 我還創建了一個hashmap,當我做arp -a時,我已經找到了ip地址。 從我在網上看到的,這個命令顯示你網絡中的ip地址。我創建了一個設置為false的布爾值,然后我繼續運行一個遍歷文本文件的循環,看看ip地址是否在hashMap中:if其中一個地址出現在hashmap中,boolean將更改為true,這意味着我已設法捕獲一些東西。 運行測試后,布爾值出錯。

這是示例代碼

   ``public class PacketCaptor {
        private static final int INFINITE = -1;
        private static final int PACKET_COUNT = INFINITE; 
      /*
          private static final String HOST = "203.239.110.20";
          private static final String FILTER = 
          "host " + HOST + " and proto TCP and port 23";
      */

      private static final String FILTER = 
        // "port 23";
        "";

      public static void main(String[] args) {

        try {
          if(args.length == 1){
              PacketCaptor sniffer = new PacketCaptor(args[0]);
          } else {
        System.out.println("Usage: java Sniffer [device name]");
        System.out.println("Available network devices on your machine:");
        String[] devs = PacketCapture.lookupDevices();

        for(int i = 0; i < devs.length ; i++)
          System.out.println("\t" + devs[i]);
          }
        } catch(Exception e) {
          e.printStackTrace();
          }

      }

      public PacketCaptor(String device) throws Exception {
        // Initialize jpcap
        PacketCapture pcap = new PacketCapture();
        System.out.println("Using device '" + device + "'");
        pcap.open(device, true);
        //pcap.setFilter(FILTER, true);
        pcap.addPacketListener(new PacketHandler());

        System.out.println("Capturing packets...");
        pcap.capture(PACKET_COUNT);
      }
    }


    class PacketHandler implements PacketListener 
    {
        WritingClass writing = new WritingClass();

      public void packetArrived(Packet packet) {
        try {
          // only handle TCP packets

          if(packet instanceof TCPPacket) {
        TCPPacket tcpPacket = (TCPPacket)packet;
        byte[] data = tcpPacket.getTCPData();

        String srcHost = tcpPacket.getSourceAddress();
        String dstHost = tcpPacket.getDestinationAddress();
        String isoData = new String(data, "ISO-8859-1");

        System.out.println(srcHost+" -> " + dstHost + ": " + isoData);
        String datas = srcHost+"|"+dstHost+"|";

        writing.write(datas, this.writing.getFileName());

          }
        } catch( Exception e ) {
          e.printStackTrace();
        }
      }

任何人都可以幫我弄清楚它為什么不起作用? 非常感謝你的幫助

您無法捕獲更多數據包的原因是因為您需要一個promisc或raw模式的接口,我建議您使用像wireshark這樣的正確嗅探器來檢查是否可以捕獲其他未發送給您的數據包。 如果不是,則表示您需要應用mitm方法,因為您處於通勤網絡中。 使用wifi上的代碼應該足夠監視模式下的接口(檢查aircrack-ng套件)。 在GNU / Linux中基於Debian的系統可以使用命令iw dev wlan0 interface add mon0 type monitor (來自包無線工具)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM