欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-10 17:35:46
...

通过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();
        }