JavaWeb - 获取访问者真实的 IP 地址(一)
在 JSP 里,获取客户端的 IP 地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache、Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实 IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。于是可得出:
获得客户端真实IP地址的方法一
public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for");
}
获得客户端真实IP地址的方法二
public String getIpAddr(HttpServletRequest request) { 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.getRemoteAddr(); } return ip;
}
可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
用户真实IP为: 192.168.1.110
更多链接
- JavaWeb - 获取客户端真实 IP(通过反向代理 Nginx)非服务器 IP(二)
JavaWeb - 获取访问者真实的 IP 地址(一)相关推荐
- Java获取访问者真实的IP地址
个人收录的一些小工具类,供大家参考 方式一 import javax.servlet.http.HttpServletRequest; /** 自定义访问对象工具类获取对象的IP地址等信息 @auth ...
- 网站配置了Cloudflare代理后,如何配置Nginx获取的真实客户端IP地址?
网站配置了Cloudflare代理后,如何配置Nginx获取的真实客户端IP地址? 这是一个很简单的问题,如何在后台获取真实的访问者IP地址? 网站为了避免有些不怀好意的访问者,不得不自动分析一下客户 ...
- request获取mac地址_【Go】获取用户真实的ip地址
原文链接:https://blog.thinkeridea.com/201903/go/get_client_ip.html 用户请求到达提供服务的服务器中间有很多的环节,导致服务获取用户真实的 ip ...
- 2021-08-26——获取电脑真实的IP地址,忽略虚拟机等IP地址的干扰
获取电脑真实的IP地址,忽略虚拟机等IP地址的干扰 此代码中只要读取到了WiFi或者有线地址其中之一立即return. 微信搜索"HUC思梦"关注我吧,关注有惊喜,不定时有免费资源 ...
- JSP 获取访问者真正的IP地址
request.getRemoteAddr(),这种方法在大部分情况下都是有效的,但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了, 如果使用了反向代理软件,用re ...
- Nginx在多层代理下获取真实客户端IP地址
最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...
- 学习笔记 - Nginx在多层代理下获取真实客户端IP地址
最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...
- HttpServletRequest、ServerHttpRequest获取访问者真实IP,并设置ip白名单
在项目记录日志的时候和网关处理IP白名单的时候,通常会获取用户IP,一般都会从HttpServletRequest.ServerHttpRequest获取访问者真实IP 1.从HttpServletR ...
- android 打开wifi并链接到制定ip,当设备连接到Android中的WiFi时,如何获取蜂窝网络的IP地址...
有没有办法我可以在 Android中同时获取WiFi和蜂窝网络的IP地址.我尝试使用很多例子,但是只能获得WiFi网络的地址而不是蜂窝网络.我启用了WiFi和蜂窝网络,设备正在通过WiFi上网. 以下 ...
最新文章
- 比特币ABC推出最新版本后讨论网络不兼容性
- 安全现状:从通杀到专杀
- JS-循环清空对象 判断数据类型的5种常用方法
- html5 canvas实际应用,Html5 Canvas入门及经典应用
- eclipse+ADT 进行android应用签名详解
- 7 招教你轻松搭建以图搜图系统!
- 什么是车联网?导航?听歌?智能语音识别?事实没这么简单!
- java jui 正则表达式_正则表达式-Gorilla City-51CTO博客
- 【原】Storm调度器
- 手机端通讯录制作,字母索引查找
- 方差,标准差,协方差,样本标准差,总体标准差,抽样平均误差
- 如何爬取中国近十年的GDP,对数据进行处理,并写入csv文件?
- Python 计算思维训练——公式编程
- Echarts绘制各种数据可视化图表案例(效果+代码)
- Datawhale组队学习周报(第046周)
- C语言入门题库——求2+22+222+......+22222的值
- 关于“上家公司离职原因”应聘者回答技巧分享
- python数据收集整理教案_数据收集整理教学设计
- pg预热插件pg_prewarm
- 双环形图表_excel两个环形图怎么画
热门文章
- echarts的人员迁徙地图动态效果
- JavaScript 判断数据类型的方法
- Html导出Excel文件(兼容所有浏览器,支持设置文件名)
- 解决Centos7下pip更新失败问题
- 财通基金VeriSign EV SSL证书网站可信服务
- (project generation have a problem)STM32CubeMX生成工程一直报错项目生成有问题[玄学三步解]
- 互联网大厂跑马圈地虚拟数字人,千亿市场爆发至少还要等上5年?
- 中国医用类金刚石碳涂层(DLC)行业市场供需与战略研究报告
- JavaScript算法之指针思想
- Linux脚本保存管道中的变量,Linux下管道重定向使用以及Shell编程(操作系统)