2013-06-22 81 views
15

在我的Android設備中,我試圖找到它的IP地址(IPV4)。
如果我做了下面的代碼獲取我的局域網IP地址(192.168.xxxx)(IPV4)

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

的代碼是給我127.0.0.1。
我想得到實際的IP 198.168.xx.xx.

(在我的電腦相同的代碼給我實際的IP雖然)。

+1

[OT]抱歉,但隱藏的私有IP(192.168。 xxx?)沒有必要,你不能被知道這些信息的人攻擊。 –

+0

@GrailsGuy不重複,OP需要192.168本地網絡地址,而不是公用路由器地址。 – laalto

+0

@LuiggiMendoza我知道,我懶得把那個放在那裏。 –

回答

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

授予權限

此外,在mainfest補充。

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

感謝您的快速回復。 我將「fe80 :: 2064:32ff:fe5d:2edf%p2p0」作爲我的地址。 它是ipv6地址。如何獲得ipv4地址? –

+0

+1用於檢查所有接口。這將照顧無線和蜂窩接口 –

+0

@VishnudevK那是因爲你的路由器配置爲ipv6地址。 – Ayush

2

您可以使用它來獲取您的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)); 

這將返回它的形式 「XXXX」

一個String您在manifest.xml唯一需要的權限是

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

如果他不使用WiFi? – SJuan76

+0

什麼是不使用wifi來獲取內部LAN地址的設備的示例? 198.168.xx.xx.以太網端口? –

+0

我經常把注意力集中在頭部的問題和錯過數據的主體上(這是唯一通知'LAN'部分的地方)。是的,一個以太網端口是可能的(儘管我同意現在不是那麼頻繁)。 – SJuan76