我需要在我的JavaFX桌面应用程序中获取用户的远程IP地址。我使用Spring来处理身份验证等事情(我的程序使用数据库连接)。我知道如何在使用Java Servlet时从http请求获取IP地址,问题是我的应用程序中没有。我考虑使用某种检查IP的网站,只是简单地将html的内容解析为字符串,但我必须在本地/独立于任何外部源做所有事情。
我感谢任何帮助,提前谢谢
编辑:一些可能有用的其他信息:我没有使用套接字,我的应用程序应该被最终用户使用,并且只有它的连接是与MySQL数据库的连接,从中获取一些内容。我需要在登录时检索用户的IP地址,将所述IP地址与端口一起放入我数据库中的特定表。
答案 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";
}
}
}
}