2012-09-14 15 views
5

Estoy tratando de crear una función que enumere todos los dispositivos conectados en una red local. Lo que hago es hacer ping a cualquier dirección del espacio de direcciones x.x.x.0 a x.x.x.255, pero parece que no funciona correctamente. ¿Alguien podría explicar o extender mi código de alguna manera? Recibo una respuesta del teléfono (10.0.0.17) y una puerta de enlace predeterminada (10.0.0.138). Este último ni siquiera debería estar allí (de hecho, no sé lo que es una puerta de enlace predeterminada, pero ignorar eso). Sin embargo, me falta el IP de esta computadora.Lista de dispositivos en la red local con ping

public ArrayList<InetAddress> getConnectedDevices(String YourPhoneIPAddress) { 
    ArrayList<InetAddress> ret = new ArrayList<InetAddress>(); 

    LoopCurrentIP = 0; 

    //  String IPAddress = ""; 
    String[] myIPArray = YourPhoneIPAddress.split("\\."); 
    InetAddress currentPingAddr; 

    for (int i = 0; i <= 255; i++) { 
     try { 

      // build the next IP address 
      currentPingAddr = InetAddress.getByName(myIPArray[0] + "." + 
        myIPArray[1] + "." + 
        myIPArray[2] + "." + 
        Integer.toString(LoopCurrentIP)); 

      // 50ms Timeout for the "ping" 
      if (currentPingAddr.isReachable(50)) { 
       if(currentPingAddr.getHostAddress() != YourPhoneIPAddress){ 
        ret.add(currentPingAddr); 

       } 
      } 
     } catch (UnknownHostException ex) { 
     } catch (IOException ex) { 
     } 

     LoopCurrentIP++; 
    } 
    return ret; 
} 
+0

Por cierto, no estoy usando un emulador, ¡uso mi teléfono! – rtc11

Respuesta

9

Aquí hay un bucle ligeramente modificado que debería ser el truco (o funcionó para mí al menos);

try { 
    NetworkInterface iFace = NetworkInterface 
      .getByInetAddress(InetAddress.getByName(YourIPAddress)); 

    for (int i = 0; i <= 255; i++) { 

     // build the next IP address 
     String addr = YourIPAddress; 
     addr = addr.substring(0, addr.lastIndexOf('.') + 1) + i; 
     InetAddress pingAddr = InetAddress.getByName(addr); 

     // 50ms Timeout for the "ping" 
     if (pingAddr.isReachable(iFace, 200, 50)) { 
      Log.d("PING", pingAddr.getHostAddress()); 
     } 
    } 
} catch (UnknownHostException ex) { 
} catch (IOException ex) { 
} 
+1

Esto parece una solución mejor, pero ahora solo obtengo la IP local en el teléfono, no en mi computadora portátil ni en mi servidor. – rtc11

Cuestiones relacionadas