0

我正在开发一个 android 应用程序,需要知道设备 ip。

我试过了,Inet4Address.getLocalHost().getHostAddress()但它给出了127.0.0.1.

因此,我正在与发送 ip 的服务器建立 HTTP 连接。

但是,当设备和请求的服务器之间存在网关时,此过程会产生问题。在这种情况下,我没有获得网络的设备 ip,而是获得了网关 ip。

请帮忙。

谢谢。

4

1 回答 1

2

首先,您可能有多个网络接口,其中一个是 lo。其次,您可能同时设置了 ipv4 和 ipv6,即每个网络接口有多个 IP 地址。因此,您需要定义将使用的 ipaddress 和网络接口,然后进行过滤。如果你只取第一个地址,你将得到与之后相同的结果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());
}
于 2013-11-20T18:22:13.993 回答