2013-06-22 14 views
15

In meinem Android-Gerät versuche ich seine IP-Adresse (IPV4) zu finden.
Wenn ich den folgenden Code tunAbrufen meiner LAN-IP-Adresse (192.168.xxxx) (IPV4)

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

Der Code wird mir geben 127.0.0.1.
Ich wollte die tatsächliche IP 198.168.xx.xx.

(in meinem PC den gleichen Code mir die tatsächliche IP geben though.)

+1

[OT] Sorry, aber eine private IP (192.168 versteckt. xxx?) ist nicht notwendig, du kannst nicht von Leuten gehackt werden, die diese Info kennen. –

+0

@GrailsGuy Nicht doppelt, OP will 192.168 lokale Netzwerkadresse und nicht die öffentliche Router-Adresse. – laalto

+0

@LuiggiMendoza Ich weiß, ich war faul das dort hinzustellen. –

Antwort

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

Geben Berechtigungen

Auch in Mainfest hinzuzufügen.

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

danke für die schnelle Antwort. Ich bekomme "fe80 :: 2064: 32ff: fe5d: 2edf% p2p0" als meine Adresse. Ist es IPv6-Adresse. wie bekomme ich die ipv4-adresse? –

+0

+1 für die Überprüfung aller Schnittstellen. Dies wird sowohl für Wi-Fi als auch für Mobilfunkschnittstellen sorgen. –

+0

@ VishnudevK Das liegt daran, dass Ihr Router für die IPv6-Adresse konfiguriert ist. – Ayush

2

Sie können dies verwenden, um Ihre IP-Adresse zu erhalten.

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

Diese gibt es als String in der Form "XXXX"

Die einzige Berechtigung, die Sie in Ihrem manifest.xml brauchen, ist

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

Und wenn er nicht WiFi benutzt? – SJuan76

+0

Was ist ein Beispiel für ein Gerät, das WLAN nicht verwendet, um eine interne LAN-Adresse zu erhalten? 198.168.xx.xx. Ethernet Anschluss? –

+0

Wie so oft, konzentriere ich mich auf den Hauptteil der Frage und vermisse Daten aus dem Header (es ist der einzige Ort, an dem der "LAN" -Teil informiert wird). Und ja, ein Ethernet-Port ist möglich (obwohl ich zustimme, dass es heutzutage nicht so häufig ist). – SJuan76

Verwandte Themen