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操作HTTP实现与服务器通信
  2. Android(安卓)Asynchronous Http Client-Android异步网络请求客
  3. 优秀的android开源项目
  4. Android(安卓)IPC(进程间通信)
  5. PHP SESSION跨页面传递失败解决方案
  6. PHP基于ip2long实现IP转换整形
  7. 基于PHP实现发微博动态代码实例
  8. Android高手进阶教程(十一)之----Android(安卓)通用获取Ip的方法
  9. Android跨进程通信-IPC初探(三) - 使用AIDL

随机推荐

  1. android前台渲染图片
  2. Android应用程序中的多个Activity的显示
  3. Android:控件AutoCompleteTextView 客户端
  4. 下载android sdk更新包离线安装解决方案
  5. Android实现按钮点击效果(第一次点击变色,
  6. Android网络请求库——android-async-htt
  7. Android 特殊用法
  8. 【翻译】(25)ANDROID ATOMICS OPERATIONS
  9. 几个android实用网站
  10. Android ListView滑动加载