2013-06-22 9 views
15

Nel mio dispositivo Android sto cercando di trovare il suo indirizzo IP (IPV4).
Se faccio il seguente codiceOttieni il mio indirizzo IP LAN (192.168.xxxx) (IPV4)

InetAddress inet = InetAddress.getLocalHost(); 
System.out.println(inet.getHostAddress()); //giving me 127.0.0.1 

Il codice mi sta dando 127.0.0.1.
Volevo ottenere l'effettivo IP 198.168.xx.xx.

(nel mio PC lo stesso codice dandomi l'IP effettivo però.)

+1

[OT] dispiace ma nasconde un IP privato (192.168. xxx?) non è necessario, non puoi essere hackerato da persone che conoscono tali informazioni. –

+0

@GrailsGuy Non duplicato, OP vuole 192.168 indirizzo di rete locale e non l'indirizzo del router pubblico. – laalto

+0

@LuiggiMendoza Lo so, ero pigro per dirlo lì. –

risposta

23
public static String getIpAddress() { 
      try { 
       for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
        NetworkInterface intf = en.nextElement(); 
        for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
         InetAddress inetAddress = enumIpAddr.nextElement(); 
         if (!inetAddress.isLoopbackAddress()&&inetAddress instanceof Inet4Address) { 
          String ipAddress=inetAddress.getHostAddress().toString(); 
          Log.e("IP address",""+ipAddress); 
          return ipAddress; 
         } 
        } 
       } 
      } catch (SocketException ex) { 
       Log.e("Socket exception in GetIP Address of Utilities", ex.toString()); 
      } 
      return null; 
    } 

dare i permessi

anche aggiungere in Mainfest.

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

grazie per la risposta rapida. Sto ricevendo "fe80 :: 2064: 32ff: fe5d: 2edf% p2p0" come mio indirizzo. È l'indirizzo ipv6. come ottenere l'indirizzo IPv4? –

+0

+1 per controllare tutte le interfacce. Questo si occuperà sia delle interfacce wifi che di quelle cellulari –

+0

@VishnudevK Ecco perché il tuo router è configurato per l'indirizzo ipv6. – Ayush

2

È possibile utilizzare questo per ottenere il vostro indirizzo IP.

WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 
int ipAddress = wifiManager.getConnectionInfo().getIpAddress(); 
return String.format("%d.%d.%d.%d", (ipAddress & 0xff), (ipAddress >> 8 & 0xff), 
     (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff)); 

Questo restituisce come una stringa nella forma "XXXX"

L'unica autorizzazione avete bisogno nel vostro manifest.xml è

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
+0

E se non sta usando il WiFi? – SJuan76

+0

Qual è un esempio di un dispositivo che non utilizza la rete wifi per ottenere un indirizzo LAN interno? 198.168.xx.xx. Porta Ethernet? –

+0

Come spesso, mi concentro nel corpo della domanda e mi manca il dato dall'intestazione (è l'unico posto dove viene informata la parte 'LAN'). E sì, una porta ethernet è possibile (anche se sono d'accordo che non è così frequente al giorno d'oggi). – SJuan76