2013-11-20 211 views
0

我正在開發一個android應用程序,需要知道設備ip。我試過Inet4Address.getLocalHost().getHostAddress(),但它給127.0.0.1JAVA獲取IP地址

所以我正在建立一個HTTP連接與發回IP的服務器。

但是,當設備和請求的服務器之間存在網關時,此過程會產生問題。在這種情況下,我不會獲取網絡的設備IP,而是獲取網關IP。

請幫忙。

謝謝。

+1

參見[如何獲得設備的IP地址(http://stackoverflow.com/questions/6064510/how-to-get-ip-address-of -裝置) –

回答

2

首先,你可能有幾個網絡接口,其中之一是lo。 其次,您可能已經設置了ipv4和ipv6,即每個網絡接口有多個ip地址。 因此,您需要定義您將使用的ipaddress和net界面,然後進行過濾。如果你只是把第一個地址,你會得到相同的結果後Inet4Address.getLocalHost().getHostAddress()

假設你想獲得的IPv4(IPv6)的地址爲您找到先不要回送接口。然後,下面的代碼給出了IP:

static InetAddress ip() throws SocketException { 
    Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces(); 
    NetworkInterface ni; 
    while (nis.hasMoreElements()) { 
     ni = nis.nextElement(); 
     if (!ni.isLoopback()/*not loopback*/ && ni.isUp()/*it works now*/) { 
      for (InterfaceAddress ia : ni.getInterfaceAddresses()) { 
       //filter for ipv4/ipv6 
       if (ia.getAddress().getAddress().length == 4) { 
        //4 for ipv4, 16 for ipv6 
        return ia.getAddress(); 
       } 
      } 
     } 
    } 
    return null; 
} 

public static void main(String[] args) throws SocketException { 
    System.out.println(ip()); 
}