Java获取客户端真实IP地址的两种方法时间:2009-03-02 14:09来源: 作者: 点击:7537次
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。
Tag:Java 客户端 真实IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。
如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为 http://www.javapeixun.com.cn / 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问http://www.javapeixun.com.cn /index.jsp/ 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问http://192.168.1.110:2046/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");
}
可是当我访问http://www.5a520.cn /index.jsp/ 时,返回的IP地址始终是unknown,也并不是如上所示的127.0.0.1 或 192.168.1.110了,而我访问http://192.168.1.110:2046/index.jsp 时,则能返回客户端的真实IP地址,写了个方法去验证。原因出在了Squid上。squid.conf 的配制文件 forwarded_for 项默认是为on,如果 forwarded_for 设成了 off 则:X-Forwarded-For: unknown
于是可得出获得客户端真实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
分享到:
相关推荐
汉王屏幕摘抄精灵是一款专为Windows平台设计的高效工具,旨在帮助用户将屏幕上的文本信息快速、准确地转换成可编辑的电子文档。这款软件的出现极大地减轻了用户手动输入纸质文档到电脑中的繁琐工作,提升了工作效率...
经典IT文章摘抄经典IT文章摘抄经典IT文章摘抄经典IT文章摘抄经典IT文章摘抄
吴大卫的摘抄笔记是对《TCP/IP路由技术》卷一卷二的精炼总结,旨在帮助网络从业人员深入理解这一关键主题。以下是笔记中可能包含的一些关键知识点: 1. **TCP/IP模型**:TCP/IP模型分为四层或五层(视具体版本),...
汉王屏幕摘抄精灵是一款强大的OCR(Optical Character Recognition,光学字符识别)软件,专为用户设计,能够高效地从图像、PDF文件中提取并转换文字。这款工具的核心功能在于其高精度的文字识别技术,使得用户能够...
该手册详细介绍了DHCP服务器的配置,包括配置静态绑定IP地址的租用有效期限、为DHCP客户端提供后续服务的服务器地址和DHCP服务器发送Trap消息的门限值等。 IP指的是互联网协议,该手册讨论了如何配置IP地址,例如...
高考议论文素材摘抄三则 高考议论文名人素材摘抄精选.docx
《初一摘抄好词好句大全》这份文档,正是为这一目的精心编纂的一份资源,它包含了众多能够激发学生学习兴趣、丰富写作素材、提升语言表达能力的优美词汇和句子。 首先,让我们来探讨一下文档中收录的一些“好词”。...
青铜葵花好词好句摘抄.doc
艾青诗选摘抄20篇.doc
美文摘抄600字.doc
星火英语美文听力4篇摘抄参考.doc
Python+pywinauto操作同花顺客户端自动化执行测试 快速下单 代码为全代码 可以选择性摘抄。
教师读书笔记摘抄及感悟.doc
斯宾塞的快乐教育读书摘抄.docx
四年级作文摘抄20篇.doc
在这份“读书笔记摘抄大全”中,我们可以提炼出几个关于成功的关键词:自我发掘、独特性、内在品质与有效行动。 首先,成功不是一种单一的模式。每个人都有自己的特点和长处,不必过分模仿他人,而应该深入发掘自己...
易中天中国智慧资料经典语句摘抄.doc
【小学二年级】小学二年级关于爱国的诗句摘抄.doc
【木小禾素材】优美句子摘抄大全20字以内
一年级经典句子摘抄大全阅读.doc