【问题标题】:Getting external IP address with Java [duplicate]使用Java获取外部IP地址[重复]
【发布时间】:2013-08-04 02:20:35
【问题描述】:

我怎样才能获得我的计算机的外部 IP,只使用 Java,而不联系如下任何网站:

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

【问题讨论】:

  • 有办法只使用 Java 来做到这一点吗?我看到获取本地IP简单易行,但是只能通过这种方式获取外部IP(Internet)?
  • "如果有一天这个网站宕机,我会遇到很大的问题。" - 您的问题不清楚 - 您是否正在尝试获取正在运行您的程序的计算机的 IP?或者您是否尝试获取连接到您的网站(服务器)的计算机的 IP 地址?
  • "获取你的 PC的外部IP" 我的外部IP地址是192.168.0.12
  • 您使用的是什么操作系统?我知道一些避免发出 HTTP 请求的仅限 Linux 的方法。
  • @acdcjunior @ Steve P. 不要认为这是重复的问题,因为我的目的是看看是否有另一种方法可以做到这一点,而不仅仅是那种方式。但对不起,如果重复是:)

标签: java ip


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 2011-02-25
    • 2011-06-29
    • 2014-01-25
    • 2013-08-19
    • 2021-11-20
    • 2013-04-03
    • 2016-03-10
    相关资源
    最近更新 更多