Necesito encontrar la dirección ip del dispositivo cuando se hospeda en un punto de acceso. He utilizado este código hasta el momento :

//if is using Hotspot
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
    NetworkInterface intf = en.nextElement();
    if (intf.getName().contains("wlan")) {
        for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
            InetAddress inetAddress = enumIpAddr.nextElement();
            if (!inetAddress.isLoopbackAddress() && (inetAddress.getAddress().length == 4)) {
                return inetAddress.getHostAddress();
            }
        }
    }
}

Esto funciona bastante bien, pero el wifi NetworkInterface nombre difiere en algunos dispositivos. Así que tengo que encontrar el dispositivo wifi NetworkInterface nombre (por su hotspot) en primer lugar. ¿Cómo puedo encontrar este nombre? O es que hay un mejor método para encontrar la dirección ip del dispositivo?

///Encontrar la dirección ip a la MAC también parece que no funciona

OriginalEl autor user2224350 | 2014-02-15

7 Comentarios

  1. 11

    Al principio traté de recuperar la dirección MAC de la interfaz WiFi para compararla con la dirección MAC de cada interfaz. Pero resulta, que al menos en mi N4 ejecución CM la MAC de la interfaz WiFi cambios al encender el Hotspot.

    Así que escribí algo de código para caminar aunque la lista de dispositivos de encontrar algo para identificar la interfaz wifi. Este código funciona perfectamente en mi N4:

    private String getWifiIp() throws SocketException {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
                en.hasMoreElements(); ) {
            NetworkInterface intf = en.nextElement();
            if (intf.isLoopback()) {
                continue;
            }
            if (intf.isVirtual()) {
                continue;
            }
            if (!intf.isUp()) {
                continue;
            }
            if (intf.isPointToPoint()) {
                continue;
            }
            if (intf.getHardwareAddress() == null) {
                continue;
            }
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
                    enumIpAddr.hasMoreElements(); ) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (inetAddress.getAddress().length == 4) {
                    return inetAddress.getHostAddress();
                }
            }
        }
        return null;
    }

    Sólo una única interfaz de partidos de todas las condiciones: wlan0.

    Posible otra solución:

    Paseo por algunas de las más comunes de la interfaz de nombres y tratar de encontrarlos en la lista: new String[] { "wlan0", "eth0", ...];

    gracias por el código compartido. salvó mi día a día.
    esta respuesta debería ser aceptada respuesta
    este es tirar el zócalo de la excepción, aunque mi hotsopt está activo.

    OriginalEl autor flx

  2. 9

    Recientemente he descubierto que el WifiAP dirección ip está codificado en Android. A menos que un usuario ha cambiado este valor manualmente (creo que es muy poco común), utilizando el valor codificado es absolutamente suficiente. Creo que este es el mejor camino a seguir. La dirección IP es «192.168.43.1» : https://github.com/CyanogenMod/android_frameworks_base/blob/cm-10.1/wifi/java/android/net/wifi/WifiStateMachine.java?source=c#L1299

    No funciona para mí (en HTC One). Cuando puedo configurar un punto de acceso Wifi de mi teléfono tengo IP 192.168.1.1. He encontrado esto por la conexión del hotspot de mi caja de Windows y comprobación de la conexión Wi-Fi IP de Puerta de enlace a través de ‘ipconfig /all’.

    OriginalEl autor user2224350

  3. 2

    Esto puede ayudarle a cabo.

    Hacer una llamada a la shell a pedir para los adaptadores de red y comprobación de los que se necesitan, como en este caso es wlan para que siga este código

    Process p=Runtime.getRuntime().exec("ip link show | grep -o \": wlan[0-9]:\" ");
    
    BufferedReader readCommandOutput = 
        new BufferedReader(new InputStreamReader(p.getInputStream()));
    
    String line=null;
    while((line=readCommandOutput.readLine())!=null){
        //Lines containing wlan will be returned
        //parse to get the name of that interface.
        String interface=line.split(":")[1];
        //this is the interface you need.
    }
    
    if (line==null){
        //nothing was found.
    }
    
    readCommandOutput.close();

    Las notas adjuntas

    Android Encontrar la dirección ip del dispositivo cuando se hospeda en un punto de acceso
    O usted puede utilizar el Android Terminal Emulator desde el play store con el fin de ejecutar este comando en el shell de android.

    Para recuperar la dirección ip

    WifiManager wifi=(WifiManager)getSystemService(WIFI_SERVICE);
    int address=wifi.getDhcpInfo().ipAddress;
    Toast.makeText(this,intToIP(address),1).show();         
    
    
    public String intToIP(int i) {
        return ((i & 0xFF) 
                + "." + ((i >> 8) & 0xFF)
                + "." + ((i >> 16) & 0xFF)
                + "." + ((i >> 24) & 0xFF));
     }
    Esto no proporciona ningún beneficio. sólo se almacena en caché los dispositivos llamados wlanX. Hay dispositivos de nomenclatura hay wifi interfaces ethX.
    Si necesitas que los demás te acaba de quitar wlan dentro de la expresión regular, pero la cuestión de si la has leído correctamente se necesita el nombre de la interfaz wifi. Así thasy he mencionado wlan dentro de ella.
    bien, la pregunta es: ¿cómo sabe cual de los dispositivos de la interfaz wifi. La lista no ofrece nada más que ir a través de la NetworkInterface.getNetworkInterfaces() y buscando un dispositivo comenzando con wlan. Pero eso ya está en la OP.
    Ya así que las respuestas que le puede ayudar a encontrar «sólo el wifi interfaces». Thatsy escribí comenzando con wlan
    Su respuesta ofrece exactamente de la misma información OP ya tenía: las direcciones ipv4 de los dispositivos de la red, comenzando con wlan.

    OriginalEl autor cafebabe1991

  4. 1

    esta solución funciona cuando se desea obtener la dirección ip del dispositivo hotspot en el mismo dispositivo pero no sabes cómo conseguir en el dispositivo conectado
    la mayoría de los ip del servidor es 192.168.43.1 usted puede conseguir el trabajo hecho por codificar)

     public void serverip()
    
        {
         DhcpInfo dhcpInfo = wifiManager.getDhcpInfo();
                if (dhcpInfo==null){
                    Toast.makeText(MainActivity.this, "No ip for server", Toast.LENGTH_SHORT).show();
                }else{
    
                    Toast.makeText(MainActivity.this, "ip of server "+android.text.format.Formatter.formatIpAddress(dhcpInfo.gateway), Toast.LENGTH_SHORT).show();
        }
    
    
                }

    OriginalEl autor Priyank Patel

  5. 0

    Por favor reemplace intf.getName() con intf.getDisplayName() y luego tratar.

    La cita de la documentación «Devuelve un nombre legible por el usuario para esta interfaz de red. En Android, esta es la misma cadena que devuelve getName().«

    OriginalEl autor Mobility

  6. 0

    Una vez que Pruebe este código :

    public String getLocalIpAddress() {
            try {
                for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                    NetworkInterface intf = en.nextElement();
                    for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                        InetAddress inetAddress = enumIpAddr.nextElement();
                        if (!inetAddress.isLoopbackAddress()) {
    
                            String ip = Formatter.formatIpAddress(inetAddress.hashCode());
                            Toast.makeText(getApplicationContext(), "***** IP="+ ip, 1).show();
    
                            return ip;
                        }
                    }
                }
            } catch (SocketException ex) {
                Toast.makeText(getApplicationContext(), "***** IP="+ex.toString(), 1).show();
    
            }
            return null;
        }

    Escribir código en oncreat para comprobar ,hotspot es Permitir que no lo son…..

    WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 
            wifiManager.setWifiEnabled(true);
            wifiManager.setWifiEnabled(false);
            boolean wifiEnabled = wifiManager.isWifiEnabled();
            if (wifiEnabled) {
                Toast.makeText(getApplicationContext(),"on",Toast.LENGTH_SHORT).show();
                getLocalIpAddress();
            }else {
                    Toast.makeText(getApplicationContext(),"off",Toast.LENGTH_SHORT).show();
            }

    OriginalEl autor R KiranKumar

  7. 0

    user2224350 dijo : «recientemente he descubierto que el WifiAP dirección ip está codificado en Android.»

    A menos que un usuario ha cambiado este valor manualmente (creo que es muy poco común), utilizando el valor codificado es absolutamente suficiente. Creo que este es el mejor camino a seguir. La dirección IP es «192.168.43.1», como se ve aquí.

    Esto funciona en mi Samsung A3, y Huawei PRA-LX1, pero el HTC Deseos 530 devuelve 192.168.1.1 así.

    OriginalEl autor yrt

Dejar respuesta

Please enter your comment!
Please enter your name here