Java 如何区分已知IP和未知IP

Java 如何区分已知IP和未知IP,java,jakarta-ee,ip,Java,Jakarta Ee,Ip,我需要开发一个web应用程序,通过存储一对(sourceIP,有效用户名)来识别已知机器和未知机器在以前成功登录的服务器端。当任何人从未知计算机登录时,如何识别。web应用程序托管在本地主机中。是否可以获取客户端ip。检索客户端ip时,我仅获取127.0.0.1,即本地主机。有人知道吗 在Servlet中,您可以执行以下操作: public class GetAddress extends HttpServlet { public void doGet(HttpServletReques

我需要开发一个web应用程序,通过存储一对(sourceIP,有效用户名)来识别已知机器和未知机器在以前成功登录的服务器端。当任何人从未知计算机登录时,如何识别。web应用程序托管在本地主机中。是否可以获取客户端ip。检索客户端ip时,我仅获取127.0.0.1,即本地主机。有人知道吗

在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 ...
    }
}

在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 ...
    }
}

简单的回答是,你不能总是得到真正的客户端IP地址

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

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

  • 如果客户端将服务器寻址为
    localhost
    ,则请求将来自localhost

  • 如果客户端位于NAT网关或IPv4 IPv6网桥后面,则您可能会看到网关或网桥的IP地址

然后是IP地址可能被欺骗的问题

简言之,依赖于了解真实客户端IP地址的安全方案通常是有问题的



如果您的问题是由于反向代理造成的(查看127.0.0.1将暗示这一点),您可以让反向代理向请求添加一个请求头,以说明它看到的远程IP地址。然后服务器需要使用该头,而不是
getRemoteAddr()
。但是,如果代理没有看到真实的客户端IP地址,这将没有帮助。

简单的回答是,您不能总是获得真实的客户端IP地址

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

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

  • 如果客户端将服务器寻址为
    localhost
    ,则请求将来自localhost

  • 如果客户端位于NAT网关或IPv4 IPv6网桥后面,则您可能会看到网关或网桥的IP地址

然后是IP地址可能被欺骗的问题

简言之,依赖于了解真实客户端IP地址的安全方案通常是有问题的



如果您的问题是由于反向代理造成的(查看127.0.0.1将暗示这一点),您可以让反向代理向请求添加一个请求头,以说明它看到的远程IP地址。然后服务器需要使用该头,而不是
getRemoteAddr()
。但是,如果代理看不到真实的客户端IP地址,那就没用了。

您是如何获得客户端IP的?您是如何获得客户端IP的?0:0:0:0:0:0:0:1我得到的是代理地址而不是请求来自的实际客户端?0:0:0:0:0:0:0:1我得到的是代理地址而不是请求来自的实际客户端?