当我在移动网络中连接时,我尝试在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()获取的值是什么意思?
感谢您的帮助。
西尔
答案 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地址。没有人(至少在本地网络之外没有人)可以使用这些地址启动到设备的连接。