如何仅使用 Java 获取计算机的外部 IP,而不联系任何网站,如下所示:
String ip = "";
try
{
URL whatismyip;
whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
ip = in.readLine();
} catch (UnknownHostException e)
{
e.printStackTrace();
} catch (MalformedURLException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
我不希望这样的原因是,如果这个网站关闭一天,我就会遇到大问题。
编辑:
把问题定义得更清楚一点:Java有没有方法可以获取用户的机器IP,如果有的话,它们是什么?
最佳答案
假设您处于使用 NAT 的典型家庭环境(计算机 - 路由器 - 互联网)中,您无法从本地计算机中运行的程序获取该地址(例如 83.154.48.7)。您最多可以获取安装在其上的网络适配器的地址(例如 192.0.0.1 之类的地址),因为“外部”地址实际上是路由器的地址。
您需要询问外部站点,因为他们会回答路由器的地址(83.154.48.7),并且路由器会将答案发送到您的电脑。
一种可能是向路由器询问其 IP,但从 PC 来看,路由器将拥有该网络的类似 192.0.0.255 的地址。 (不知道你是否可以获取路由器中的所有地址并过滤它们)
For if one day this site down, I will have big problems.
您可以拥有一个可以从中获取地址的网站列表,并逐一尝试,直到其中一个可用为止。
关于java - 使用Java获取外部IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023221/