在JavaFX桌面应用程序中获取远程IP地址

时间:2014-12-16 21:33:39

标签: java spring javafx httprequest ip-address

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

我感谢任何帮助,提前谢谢

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

1 个答案:

答案 0 :(得分:1)

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

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";
            }
        }
    }

}