gpt4 book ai didi

java - 如何在不使用外部主机的情况下以编程方式查找设备的外部 IP 地址?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:06 25 4
gpt4 key购买 nike

当我读取设备的 IP 地址时,我总是得到本地 IP 地址。

我使用以下代码 fragment 来做到这一点。

public String getIpAddress() {
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()) {
String ip = Formatter.formatIpAddress(inetAddress.hashCode());
Log.d("VPNConnected",ip);
return ip;
}
}
}

} catch (Exception ex) {
Log.d("exception", ex.toString());
}
return "EMPTY";
}

但我需要读取外部 IP 地址而不使用任何外部主机或 Web API,例如 http://jsonip.com

最佳答案

大多数回复都是完全正确的。最好的办法是让你连接到一个外部服务,这个服务用你的公共(public) IP 地址回复。但是,您不想连接到外部服务是有原因的(1)您只是不想运行自己的服务或不想为某些第三方服务付费,以及(2)您的应用程序应该以“隐身”模式运行,并且而不是时不时地联系互联网上的一些服务。

然而,您可以做的是依赖 100% 纯 Java traceroute 实现,例如此处介绍的实现:http://people.dsv.su.se/~miko1432/ip/ip1/4.3/doc/_traceroute_8java_source.html

通过连接到 traceroute 实现,您可以在您的互联网路径上一个接一个地 ping 一个主机。基本上,通过这种方式,您可以“ping”任意公共(public) IP 地址并查看到达目的地的路由。

如果查看跟踪,您会看到私有(private)(非路由)IP 地址,例如网络 192.168.0.0/16 和 10.0.0.0/8 中的 IP 地址。您可以放心地假设这些是私有(private)地址,而您路由上的第一个公共(public) IP 地址就是您的公共(public) IP 地址。

这也适用于为客户端设备分配公共(public) IP 地址的情况,例如某些移动运营商或学术网络的情况。

关于java - 如何在不使用外部主机的情况下以编程方式查找设备的外部 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24803930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com