java - 使用Java获取外部IP地址

标签 java ip

如何仅使用 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/

相关文章:

php - 我的 IP 在 PHP 主服务器中显示错误

Java\JSON : UnrecognizedPropertyException: Unrecognized field "CefMessagesGenerators" error

java - 在 ServletContextListener 上获取 Spring 应用程序上下文

java - JDBC Derby JPA 持久性测试问题 "Internal Exception: java.sql.SQLSyntaxErrorException: Syntax error: Encountered ' USER'"

php - 没有mysql的php中唯一的ip访问重定向

tcp - TCP 数据包的 MTU 是否包含 TCP 和 IPv4 header ?

java - 系统输出打印速度慢

java - 使用 Java 将文档上传到共享点的 API

php - 使用 PHP 获取用户的真实 IP 地址

php - 如何知道IP是否是外部IP?