2015-04-22 2 views
1

Я пытаюсь отобразить список всех устройств, подключенных к текущей сети Wi-Fi.Поиск IP-адресов с Android

Проблема, с которой я столкнулся, - это когда я пытаюсь использовать приведенный ниже код (используя DNS-поиск) на Java, я вижу несколько устройств. (И это хорошо); но он не работает на моем устройстве или эмуляторе Android.

Кто-нибудь знает, что я делаю неправильно? Я развиваюсь на Lolipop Phone, подключенном к WiFi. Единственный IP-адрес, который найден, является локальным хостом.

byte[] ip = localhost.getAddress(); 
       for (int i = 0; i <= 254; i++) 
       { 
        ip[3] = (byte)i; 
        InetAddress address = InetAddress.getByAddress(ip); 
        if (!address.getHostAddress().equals(address.getHostName())) 
        { 
         // machine is known in a DNS lookup 
          AvailableHostList.add(address); 
        } 
        else 
        { 

        } 
+0

Следует иметь в виду, что на некоторых носителях Verizon, например, беспроводные смартфоны используют только IPv6 (более 18 квинтиллионов адресов на подсеть). Я не верю, что любой из перевозчиков позволит вам обнаружить другие устройства в вашей сети, поскольку это нарушение безопасности. Я не уверен, как они работают с Wi-Fi, но я сомневаюсь, что вы можете это сделать в сети оператора. –

+0

Правильно, я пытаюсь сделать это на Wi-Fi (не в сетях операторов). Есть и другие приложения, которые это делают, поэтому я знаю, что это возможно. – John

+0

ОК. Также помните, что подсети IPv4 могут иметь переменное количество адресов, а подсетей IPv6 имеют такое большое количество, что вам потребуется много тысяч лет, чтобы проверить их все грубой силой. Вы должны проверить размер подсети в IPv4, чтобы вы могли попробовать проверить, но я видел, как люди используют 10.0.0.0/8, что будет непрактичным, а коммерческий Wi-Fi может помешать вам проверять любые другие адреса в вашей подсети. –

ответ

0

Все, я, наконец, получил это, чтобы работать. Проблема заключалась в том, что я не смог правильно получить IP-адрес. Поэтому я сначала нашел свой местный IP .. ниже ...

    for (NetworkInterface intf : Collections.list(NetworkInterface.getNetworkInterfaces())) 
       { 
        for (InetAddress addr : Collections.list(intf.getInetAddresses())) 
        { 

         if (!addr.isLoopbackAddress()) 
         { 
          int ipAddress = 0; 
          ipAddress = wifiInfo.getIpAddress(); 
          ip = "IP: " + String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff)); 
          localIP = String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff)); 
         } 
        } 
       } 

localIP - это IP-адрес в формате String. (1.2.3.4). Итак, я просто сделал байт с IP-адресом и просмотрел каждый из них. Я сохранил каждый IP-адрес, который был на DNS-сервере, или получил ответ, в ArrayList.

byte[] ip = new byte[4]; 
    int ipInt = parseNumericAddress(localIP); 
    ip[3] = (byte) (ipInt & 0xFF); 
    ip[2] = (byte) ((ipInt >> 8) & 0xFF); 
    ip[1] = (byte) ((ipInt >> 16) & 0xFF); 
    ip[0] = (byte) ((ipInt >> 24) & 0xFF); 


       progressDialog.incrementProgressBy(1); 
       for (int i = 1; i <= 255; i++) 
       { 
        progressDialog.incrementProgressBy(1); 
        ip[3] = (byte)i; 

        try { 
         InetAddress address = InetAddress.getByAddress(ip); 
         if (address.isReachable(100)) 
         { 
          // machine is turned on and can be pinged 
          System.out.println("***Can Be Pinged*** Host Name " + address.getHostName() + address.getAddress().toString()); 
          AvailableHostList.add(address.getHostName().toString()); 
         } 
         else 
         if (!address.getHostAddress().equals(address.getHostName())) 
         { 
          // machine is known in a DNS lookup 
          System.out.println("***Can Be Found in DNS Look Up*** HostName:" + address.getHostName() + "Address: "+address.getAddress().toString()); 
          AvailableHostList.add(address.getHostName().toString()); 
         } 
         else 
         { 
          System.out.println("Can Not Be Found" + address.toString()); 

         } 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        }