【问题标题】:Get remote IP address in JavaFX desktop app在 JavaFX 桌面应用程序中获取远程 IP 地址
【发布时间】:2015-02-15 08:03:04
【问题描述】:

我需要在我的 JavaFX 桌面应用程序中获取用户的远程 IP 地址。我正在使用 Spring 来处理诸如身份验证之类的事情(我的程序使用数据库连接)。我确实知道在使用 Java Servlet 时如何从 http 请求中获取 IP 地址,问题是我的应用程序中没有。我考虑使用某种检查 IP 的网站,并简单地将 html 的内容解析为字符串,但我必须在本地/独立于任何外部源做所有事情。

感谢任何形式的帮助,在此先感谢

编辑:一些可能有帮助的附加信息:我没有使用套接字,我的应用程序应该由最终用户使用,并且它拥有的唯一连接是与 MySQL 数据库的连接,它从中获取一些内容。我需要在登录时检索用户的 IP 地址,以便将该 IP 地址与端口一起放入我数据库中的特定表中。

【问题讨论】:

  • 我认为如果不从外部来源获取外部 IP,您将无法获取外部 IP。当然,有人可能会证明我错了。如果需要,请使用 icanhazip.com
  • @EpicPandaForce 说了什么;除非运行应用程序的机器直接接收您要查找的 IP,否则这基本上是不可能的。由于网络/端口转换的性质,如果不查询外部源或查询进行转换的路由器/防火墙(没有真正的路由器/防火墙会支持),就不可能知道未转换的 IP。

标签: java spring javafx httprequest ip-address


【解决方案1】:

正如 cmets 中所建议的,这样做的唯一方法是查询外部源。您可以相当轻松地编写一些代码来执行此操作,例如

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;


public class RealIPScraper {
    private static final String URL_STRING = "http://www.realip.info/api/p/realip.php" ;

    private static final Pattern pattern = Pattern.compile("\\{\"IP\":\"(?<ip>.*)\"\\}");

    public static String getIP() throws IOException {
        URL url = new URL(URL_STRING);
        try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()))) {
            String content = String.join("\n", in.lines().collect(Collectors.toList()));
            Matcher matcher = pattern.matcher(content);
            if (matcher.matches()) {
                return matcher.group("ip");
            } else {
                return "No ip found";
            }
        }
    }

}

【讨论】:

  • 是否可以像你说的那样获取端口?
  • 不...我什至不确定这个问题是否有意义。该代码通过连接到另一个(Web)服务器来工作。报告的端口只是您连接的服务器上的端口,这对于您想要做什么来说毫无意义。
猜你喜欢
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 2019-04-12
  • 1970-01-01
  • 2020-11-29
  • 2012-03-01
相关资源
最近更新 更多