【问题标题】:Different values when getting IP Address on Android在 Android 上获取 IP 地址时的不同值
【发布时间】:2015-10-15 22:09:00
【问题描述】:

当我连接到移动网络时,我尝试在 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() 得到的值是什么意思?

感谢您的帮助。

西尔万

【问题讨论】:

  • 你得到了什么值?我打赌你在本地获得 localhost 地址,但网络服务会为你提供网络提供商提供给你手机的地址。
  • ipAddress() 方法返回类似 10.205.250.163 的值。本地主机地址会更喜欢 192.168.xx.xx 不?
  • Localhost 几乎总是 127.0.0.1,但可以是 127.x.x.x 形式的任何内容。

标签: android mobile network-programming ip


【解决方案1】:

您使用的是蜂窝网络吗?

您说您看到的是 10.x.x.x IP 地址。 10.x.x.x 就像 192.168.x.x ——它是一个私有网络内部地址,而不是一个全局地址。您处于某种 NAT 设置中。

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

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

在任何一种情况下,这意味着从您的代码中可见的 IP 地址不能被外部机器或设备使用。没有人(至少,没有人在您的本地网络之外)可以使用这些地址向您的设备发起连接

【讨论】:

  • 此外,每次您通过蜂窝运营商连接到互联网时,每次都会分配不同的 IP。
猜你喜欢
  • 2020-12-10
  • 2015-04-16
  • 2014-09-12
  • 2016-11-02
  • 2013-03-17
  • 2013-05-19
  • 2011-09-11
  • 2014-05-25
  • 1970-01-01
相关资源
最近更新 更多