如何区分已知IP和未知IP

时间:2013-01-21 08:32:50

标签: java java-ee ip

我需要开发一个Web应用程序,通过在服务器端存储一对(sourceIP,有效用户名)来识别已知机器并且未知,之前登录成功。当任何人从未知机器登录时如何识别.web应用程序托管在本地host.is它可以获取客户端IP.when检索客户端IP我只得到127.0.0.1这是localhost.anyone有任何想法......?

2 个答案:

答案 0 :(得分:3)

简短的回答是,您无法始终获得真实的客户端IP地址。

如果客户端具有自己的IP地址并直接连接到服务器,则HttpServletRequest.getRemoteAddr()应该返回它。但是:

  • 如果客户端的请求通过代理或反向代理到达服务器,则getRemoteAddr()将返回第一个上游代理地址。

  • 如果客户端来自 localhost,则客户端将localhost称为服务器。

  • 如果客户端位于NAT网关或IPv4< - >之后。 IPv6网桥您可能会看到网关或网桥的IP地址。

然后存在IP地址可能被欺骗的问题。

简而言之,依赖了解真实客户端IP地址的安全方案通常存在问题。


如果您的问题是由反向代理引起的(并且看到127.0.0.1会暗示这一点),您可以让反向代理向请求添加请求标头,以说出它看到的远程IP地址。然后服务器需要使用该标头而不是getRemoteAddr()。但是,如果代理没有看到真正的客户端IP地址,那将无济于事。

答案 1 :(得分:0)

在Servlet中你可以这样做:

public class GetAddress extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        String ip = request.getRemoteAddr();
        // now you can check if the ip exists and if not store it or do other usefull stuff ...
    }
}