java获取请求方的IP

1:

request.getHeader( "X-Real-IP" )

2:

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

3:

 String ip=request.getHeader("x-forwarded-for");
                if(ip==null){
                    ip=request.getRemoteAddr();
                }
                String ips[]=ip.split(",");`
                                ip=ips[0];以上几种方式都是可以的,但是这些方法找到的IP都有可能不正确的,
  • 如果您的servlet运行在位于反向代理或负载均衡器后面的Web服务器上,那么可以将该Web代理配置为注入一个请求标头,该标头提供请求来自的IP地址。不同的反向代理将注入不同的头文件。请查阅您的(前端)服务器的文档。

  • 如果您的客户端使用(转发)代理,那么它可能会插入标头来说明客户端IP地址是什么......或者它可能不会。它插入的IP地址可能不正确。

  • 通过调用获得的值request.getRemoteAddr()将成为请求的上游直接的IP地址(最后一个代理的ip)

您列出的所有标题都不是标准的,但“x-forwarded-for”被认为是事实标准; 即它是最有可能被代理插入的那个,等等......如果有什么东西被注入的话。

最后,即使你确实得到了一个IP地址,它也不一定会帮助你。例如,如果客户端位于专用网络并通过NAT网关连接到互联网,则HTTP请求中的IP地址将是NAT服务器的地址...而不是实际的客户端IP。


那么,这意味着什么?基本上,这意味着通常你不能可靠地找出请求源自的系统的IP地址。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值