1. JSP 获取真实IP地址的代码
  2. ``````json
  3. JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。
  4. 但是在通过了 ApacheSquid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 192.168.1.110,而并不是客户端的真实IP。
  5. 经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了XFORWARDEDFOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp 文件,而是先由代理服务器去访问index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
  6. 于是可得出获得客户端真实IP地址的方法一:
  1. public String getRemortIP(HttpServletRequest request) {
  2. if (request.getHeader("x-forwarded-for") == null) {
  3. return request.getRemoteAddr();
  4. }
  5. return request.getHeader("x-forwarded-for");
  6. }
  1. 获得客户端真实IP地址的方法二:
  1. public String getIpAddr(HttpServletRequest request) {
  2. String ip = request.getHeader("x-forwarded-for");
  3. if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  4. ip = request.getHeader("Proxy-Client-IP");
  5. }
  6. if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  7. ip = request.getHeader("WL-Proxy-Client-IP");
  8. }
  9. if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  10. ip = request.getRemoteAddr();
  11. }
  12. return ip;
  13. }
  1. 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
  2. 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。如:
  3. X-Forwarded-For192.168.1.110 192.168.1.120 192.168.1.130 192.168.1.100
  4. 用户真实IP为: 192.168.1.110

更多相关文章

  1. Android学习笔记——蓝牙入门
  2. android binder c++层-客户端(c++) 调用 服务端(c++) 例子
  3. Android客户端连接服务器
  4. JSP 获取真实IP地址的代码
  5. Android操作HTTP实现与服务器通信
  6. Android(安卓)Asynchronous Http Client-Android异步网络请求客
  7. 优秀的android开源项目
  8. Android(安卓)IPC(进程间通信)
  9. PHP基于ip2long实现IP转换整形

随机推荐

  1. Android用户看过来,免ROOT和顽固后台拜拜
  2. 【Android笔记】Android统计文件夹大小,删
  3. 让 Android 可以识别BMP图片文件,且目前A
  4. android中的 Handler机制
  5. Android中的WebView
  6. 第一行代码笔记1
  7. Android 强大的图片加载缓存— Glide
  8. Android 启动流程简介
  9. Android 碎屏效果 (Crack Screen,击碎屏
  10. Android设备定制为永不锁屏