- 浏览: 366122 次
文章分类
最新评论
-
strchi:
这个网站,什么都没有了
做小说搜索网站,这个是不是有可能会侵权的呢? -
从此醉:
楼主倒是给出解决办法啊
Java虚拟机支持的最大内存限制 -
kjmmlzq19851226:
又要增强客户体验,又要降低伪造攻击的概率,╮(╯▽╰)╭,程序 ...
Web安全测试之跨站请求伪造(CSRF)篇(图) -
zhangxinze:
linux下使用Java获取客户端ip地址?大家有何高见,我现 ...
怎样用Java来获取真实的IP地址 -
k_kid9157:
学习 感谢分享:-)
log4j的ConversionPattern参数的格式含义
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。
如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为 http://www.bt285.cn / 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问http://www.5q520.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");
- }
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;
- }
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
评论
11 楼
zhangxinze
2013-03-25
linux下使用Java获取客户端ip地址?大家有何高见,我现在获得的客户端访问IP都是127.0.0.1
10 楼
terencewong
2009-01-11
JAVA程序员为啥就不懂啊,其实要是CPU可以直接解析字节码到指令的话,JAVA和C,C++没有区别吧。JAVA 也可以写协议栈啊。
这个也就是个HTTP报文解析的问题,也值得拿来说。Java程序员估计协议是不懂的,呵呵!
softcat 写道
这个也就是个HTTP报文解析的问题,也值得拿来说。Java程序员估计协议是不懂的,呵呵!
9 楼
whaosoft
2009-01-10
呵呵 java程序员 也懂协议的 大学里java只是选修课
说java程序员不懂协议那人 你该说是那些培训学校出来的java程序员才不懂协议
都是因为现在垃圾般的培训学校太多了 都去学java 才会这样
说java程序员不懂协议那人 你该说是那些培训学校出来的java程序员才不懂协议
都是因为现在垃圾般的培训学校太多了 都去学java 才会这样
8 楼
jeasony
2009-01-09
这个好像在其他地方也看到过。。。
7 楼
hetylei
2009-01-09
作用不大,一般的代理是不支持的
6 楼
SysTem128
2009-01-08
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(); }
5 楼
softcat
2009-01-08
是个HTTP报文解析的问题,也值得
softcat 写道
这个也就是个HTTP报文解析的问题,也值得拿来说。Java程序员估计协议是不懂的,呵呵! internet也就是tcp/ip报文解析之类的 Java都是偏业务多点,比较少不和底层协议打交道,术业有专攻,呵呵
internet 绝不仅仅就是TCP/IP,网络分几层啊?呵呵!Java也是可以做协议栈的。
xijinn 写道
softcat 写道
这个也就是个HTTP报文解析的问题,也值得拿来说。Java程序员估计协议是不懂的,呵呵! internet也就是tcp/ip报文解析之类的 Java都是偏业务多点,比较少不和底层协议打交道,术业有专攻,呵呵
internet 绝不仅仅就是TCP/IP,网络分几层啊?呵呵!Java也是可以做协议栈的。
4 楼
xijinn
2009-01-08
softcat 写道
这个也就是个HTTP报文解析的问题,也值得拿来说。Java程序员估计协议是不懂的,呵呵!
internet也就是tcp/ip报文解析之类的
Java都是偏业务多点,比较少不和底层协议打交道,术业有专攻,呵呵
3 楼
softcat
2009-01-07
这个也就是个HTTP报文解析的问题,也值得拿来说。Java程序员估计协议是不懂的,呵呵!
2 楼
每个人都可爱
2009-01-06
晕~~我今天也在研究这个问题!
1 楼
天机老人
2009-01-06
顶一个……
发表评论
-
推荐JS压缩工具ESC
2009-01-08 20:13 2110昨天将CheckBox转Text的代码从HTML中剥离出来之 ... -
CLOSE_WAIT状态的生成原因[转]
2008-12-16 14:50 3033CLOSE_WAIT状态的生成原因首先我们知道,如果我们的Cl ... -
tcp相关状态
2008-12-16 14:42 1269客户端口实际上就是从本机访问其它计算机服务时打开的源端 ... -
网站前端优化一些小经验
2008-12-04 20:32 915着第3届bt论坛的顺利结 ... -
Base64基础(2)
2008-12-02 10:19 1290url: http://zh.wikipedia.org/wi ... -
什么是Base64以及sun.misc.BASE64Decoder的用法
2008-11-24 15:10 4803Base64是网络上最常见的用于传输8Bit字节代码的编码方式 ... -
Regex的一些常用例子
2008-11-11 12:37 1298import java.util.HashMap; imp ... -
值得收藏的健康知识
2008-11-03 11:53 1520不要死于无知。 不要拿 ... -
java的File#renameTo(File)方法的陷井
2008-10-27 10:17 1647以前我一直以为File#renameTo(File)方法与OS ... -
垂直搜索的信息分类如何做
2008-10-24 10:09 1450垂直搜索的优势就在 ... -
Twitter的增容处理
2008-10-21 12:00 962文/Patrick Joyce译/杨昊 由于之前 ... -
一步步图解 Tomcat 体系结构
2008-10-08 10:42 2248Apache Tomcat 是一款非常著名的开源 Servle ... -
Java编码原理与解决方案
2008-10-07 22:40 1276一、Java编码是怎么回事? 对于使用中文以及其他非拉丁语系语 ... -
JAVA分布式应用中使用XML数据
2008-09-24 15:14 1261可扩展标记语言(XML) ... -
红黑树(red-black tree)算法,附AVL树的比较
2008-09-03 15:01 14095红黑树的定义 正如在CLR ... -
状态对象:数据库的替代者
2008-09-03 10:39 879这是一个实战中非常重 ... -
一个计算机专业学生几年的编程经验汇总
2008-08-02 21:04 1380想来学习Java也有两个年头了,永远不敢说多么精通,但也想谈谈 ... -
UUID的介绍与使用
2008-07-30 17:24 2853一.UUID的介绍:UUID又称为通用唯一标识符,是一个128 ... -
htmlparser使用指南
2008-07-05 14:07 2984需要做一个垂直搜索引擎,比较了nekohtml和htmlp ... -
Apache安装配置与优化
2008-07-04 15:06 1620文针对apache web服务器的安装配置收集有效的一些经验 ...
相关推荐
Java获取客户端真实IP地址
用Java来获取访问者真实的IP地址 使访问者感觉会更友好哦,
通过输入的ip地址,读取纯真ip数据库,获取该IP地址所在地区
但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。
但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。所以...
获取用户真实IP地址 获取用户真实IP地址 获取用户真实IP地址
使用intellij idea java开发软件,通过servlet获取访问用户的真实ip地址
java socket nginx tcp转发 用户真实IP测试,文章请看我的博客
主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache、Squid、nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下
Java中获取IP地址,主机名称,网卡地址
获取本地IP地址,获取本地Host名称,获取Linux下的IP地址,获取用户真实IP地址,get/post请求 相应的工具类
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了
IpUtil工具类--通过request获取IP,通过IP获取地址(需要联网,调用淘宝的IP库)。使用场景:在网站开发记录用户增删改查日志的时候,往往需要记录操作人的IP地址,来准确的生成操作日志记录等
由于JAVA语言的跨平台特性,以上程序编译后可直接在任何装有JVM系统的机器上运行。以上程序旨在抛砖引玉,读者可将上述代码稍加变换转化成APPLET加到你的homepage中,或将地址查询结果写到一个文件中去,建立自己...
根据用户的请求相应的真实IP地址,获取请求的位置信息,包括如何获取用户的真实IP地址,以及根据真实ip获取位置信息
主要介绍了Java获取客户端真实IP地址过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
但是在通过了apache,squid等反向代理软件就不能获取到客户端的真实ip地址了。如果使用了反向代理软件,用request.getremoteaddr()方法获取的ip地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实ip。
java读取IP的真实地址,可以根据ip或许所属地区省市等。。。
在很多应用下都可能有需要将用户的真实IP记录下来,这时就要获得用户的真实IP地址,在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等...
但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软件,将http://192.168.1.110:2046/的URL反向代理为http://www.abc.com/的URL时,用request.getRemoteAddr()方法...