在Android上获取IP地址时的不同值

时间:2015-07-25 07:21:47

标签: android mobile network-programming ip

当我在移动网络中连接时,我尝试在Android上获取外部IP地址值。

我使用以下代码:

public static String ipAddress() {
    String ipAddress = "N/A";
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface
                .getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();

            for (Enumeration<InetAddress> enumIpAddr = intf
                    .getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();

                if (!inetAddress.isLoopbackAddress()) {
                    ipAddress = inetAddress.getHostAddress().toString();
                }
            }
        }

    } catch (SocketException ex) {
    }

    return ipAddress;
}

它返回一个值。可以肯定的是,我还在我的应用程序中使用了类似的服务:http://ifconfig.me/ip.json,它返回外部IP地址。

我的问题是该服务返回的方法与ipAddress()方法不同。

那么,你能帮我理解ipAddress()方法有什么问题吗?从ipAddress()获取的值是什么意思?

感谢您的帮助。

西尔

1 个答案:

答案 0 :(得分:2)

您使用的是移动网络吗?

你说你看到的是10.x.x.x的IP地址。 10.x.x.x与192.168.x.x类似 - 它是一个私有网络内部地址,而不是一个全局有意义的地址。你在某种NAT设置中。

在蜂窝数据方面,你基本上总是落后于由蜂窝运营商自己运营的巨型NAT系统。由于NAT系统,普通的互联网站点和机器通常无法打开与移动设备的连接。移动台肯定不会为您设置端口转发。

如果您使用的是无线网络,那只是意味着设置私有内部网络的人决定使用10.x.x.x IP地址而不是192.168.x.x - 这很常见。

在任何一种情况下,都意味着外部机器或设备无法使用代码中可见的IP地址。没有人(至少在本地网络之外没有人)可以使用这些地址启动设备的连接。