2013-06-22 15 views
15

Na moim urządzeniu z Androidem próbuję znaleźć jego adres IP (IPV4).
Jeśli robię następujący kodUzyskiwanie adresu IP mojej sieci LAN (192.168.xxxx) (IPV4)

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

Kod daje mi 127.0.0.1.
Chciałem uzyskać rzeczywiste IP 198.168.xx.xx.

(w moim komputerze ten sam kod daje mi choć rzeczywisty adres IP.)

+1

[OT] Przepraszam, ale ukrywanie prywatnego IP (192.168. xxx?) nie jest konieczne, nie możesz zostać zhakowany przez ludzi, którzy znają te informacje. –

+0

@GrailsGuy Nie duplikuj do tego, OP chce 192.168 adresu sieci lokalnej, a nie publiczny adres routera. – laalto

+0

@LuiggiMendoza Wiem, byłem leniwy, aby to tam umieścić. –

Odpowiedz

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; 
    } 

Daj uprawnienia

dodać także w mainfest.

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

dzięki za szybką odpowiedź. Otrzymuję "fe80 :: 2064: 32ff: fe5d: 2edf% p2p0" jako mój adres. Czy jest to adres IPv6. jak zdobyć adres IP? –

+0

+1 do sprawdzania wszystkich interfejsów. To zajmie się zarówno interfejsami Wi-Fi, jak i komórkowymi. –

+0

@VishnudevK Thats, ponieważ router jest skonfigurowany dla adresu IPv6. – Ayush

2

Możesz użyć tego do uzyskania adresu 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)); 

ta zwraca go jako ciąg w postaci "XXXX"

Jedyny gość, czego potrzebujesz w swojej manifest.xml jest

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

A jeśli nie używa Wi-Fi? – SJuan76

+0

Jaki jest przykład urządzenia, które nie korzysta z Wi-Fi, aby uzyskać wewnętrzny adres LAN? 198.168.xx.xx. Port Ethernet? –

+0

Jak zwykle koncentruję się w treści pytania i pomijam dane z nagłówka (jest to jedyne miejsce, w którym informuje się o części 'LAN'). I tak, port ethernetowy jest możliwy (chociaż zgadzam się, że nie jest tak często w dzisiejszych czasach). – SJuan76

Powiązane problemy