当前位置: 首页 > 工具软件 > request-ip > 使用案例 >

通过Request获取请求方的IP地址

饶承宣
2023-12-01

通过request 获取请求方的地址,使用的是request.getRemoteAddr();这个方法。但是这个请求方通过使用反向代理服务器修改请求的ip地址怎么办 。
使用反向代理服务器时,访问服务器是反向代理服务器访问的,反向代理服务器再将得到的结果返回给真实的请求方。所以这种情况直接使用request.getRemoteAddr();这个方法得到的是代理工具的ip地址。并不是真正的请求方的地址。

下面参考来自:http://blog.csdn.net/xiaokui_wingfly/article/details/45888381

通过下面操作可以得到真实访问者的ip。

String ip = request.getHeader("x-forwarded-for");  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("Proxy-Client-IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("WL-Proxy-Client-IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_CLIENT_IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getRemoteAddr();  
        }  
        return ip;

接下是得到服务器的IP,这个比较简单。今天就用了用。

InetAddress ia = null;
        try {
            ia = ia.getLocalHost();
            String name = ia.getHostName();//得到服务器的名称
            String ip = ia.getHostAddress();//得到服务器的ID
        } catch (Exception e) {
            e.printStackTrace();
        }
 类似资料: