0

如何仅使用 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 的方法,如果有,它们是什么?

4

1 回答 1

3

假设您处于使用 NAT 的典型家庭环境(计算机 - 路由器 - 互联网)中,您无法从本地计算机上运行的程序获取该地址(例如 83.154.48.7)。您最多可以获取安装在其上的网络适配器的地址(地址如 192.0.0.1),因为“外部”地址实际上是路由器的地址。

您需要询问外部站点,因为他们会回答路由器的地址(83.154.48.7),路由器会将答案发送到您的电脑。

一种可能是向路由器询问他的 IP,但从 PC 上看,路由器将有一个类似 192.0.0.255 的地址用于该网络。(不知道您是否可以获取路由器中的所有地址并过滤它们)

因为如果有一天这个网站宕机,我会遇到很大的问题。

您可以列出可以从中获取地址的站点列表,然后逐个尝试,直到其中一个启动为止。

于 2013-08-02T18:14:57.567 回答