`
异步获取爱
  • 浏览: 79994 次
  • 性别: Icon_minigender_1
  • 来自: 大男子主义世界
社区版块
存档分类
最新评论

获得用户正确的IP地址

阅读更多
像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加一些WLS要用的头信息。这种情况下,直接用request.getRemoteAddr()是无法取到真正的客户IP的。

实际的iisforward附加头如下:

WL-Proxy-Client-IP=211.161.1.239
Proxy-Client-IP=211.161.1.239
X-Forwarded-For=211.161.1.239
WL-Proxy-Client-Keysize=
WL-Proxy-Client-Secretkeysize=
X-WebLogic-Request-ClusterInfo=true
X-WebLogic-KeepAliveSecs=30
X-WebLogic-Force-JVMID=-327089098
WL-Proxy-SSL=false

综上,正确作法如下:
private String getIpAddr() {
     String ipAddress = null;
     //ipAddress = this.getRequest().getRemoteAddr();
     ipAddress = this.getRequest().getHeader("x-forwarded-for");
     if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
      ipAddress = this.getRequest().getHeader("Proxy-Client-IP");
     }
     if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
         ipAddress = this.getRequest().getHeader("WL-Proxy-Client-IP");
     }
     if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
      ipAddress = this.getRequest().getRemoteAddr();
      if(ipAddress.equals("127.0.0.1")){
       //根据网卡取本机配置的IP
       InetAddress inet=null;
    try {
     inet = InetAddress.getLocalHost();
    } catch (UnknownHostException e) {
     e.printStackTrace();
    }
    ipAddress= inet.getHostAddress();
      }
       
     }

     //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
     if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
         if(ipAddress.indexOf(",")>0){
             ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
         }
     }
     return ipAddress;
  }
分享到:
评论

相关推荐

    查QQ用户IP地址,查QQ用户IP地址

    查QQ用户IP地址 1.通过FolkOicq查IP FolkOicq是个能给QQ添加IP显示补丁的程序,最新版本FolkQQ0530SE_B2。下载后得到一个Zip的压缩包,用Winzip解压出文件QQ2000.EXE,将它复制到QQ的安装目录下(在这之前最好是...

    ip地址规划 ip地址规划

    - **高效利用资源**: 合理的IP地址规划可以避免IP地址浪费,确保有限的地址空间得到最优化的使用。 - **网络可扩展性**: 良好的规划有助于网络在未来需求增加时轻松扩展。 - **简化管理**: 通过合理规划,网络管理...

    获取内网ip地址3种方法

    - 多网络接口设备可能有多个IP地址,需要正确判断哪个是内网IP。 - 有些网络环境可能通过代理服务器访问外网,这时直接获取的IP可能并非内网IP,而是公网IP或代理服务器的IP。 - 在动态分配IP地址的网络中,IP可能会...

    asp.net获得用户IP和MAC地址的方法

    获取用户IP地址的方法较多,其中最常见的是通过服务器端的HTTP请求来获取。对于ASP.NET应用而言,可以通过以下几种方式实现: 1. **使用Request对象:** ```csharp string ipAddress = Request.UserHostAddress; ...

    公司IP地址冲突怎么解决.pdf

    这样能有效防止用户私自修改IP地址,也可以阻止未授权的设备接入局域网,保障了局域网的信息安全。 综上所述,解决IP地址冲突的方法包括采用自动获取IP地址的方式、配置DHCP服务器分配固定IP地址、开启IP-MAC绑定...

    得到网卡号及IP地址

    标题 "得到网卡号及IP地址" 描述的是在PowerBuilder (PB)环境中获取网络接口卡(NIC,也称为网卡)的物理地址(MAC地址)以及分配给该设备的IP地址的过程。在这个场景中,开发者可能需要这些信息来实现特定的网络...

    ip地址查询

    - 网络ID(Network ID):通过子网掩码与IP地址进行AND运算得到,表示设备所在的网络。 - 主机ID(Host ID):IP地址减去网络ID剩下的部分,表示网络内设备的唯一标识。 在描述中提到的“ip地址转换”,可能是指将...

    批量获得局域网ip地址

    标题“批量获得局域网ip地址”表明我们需要解决的问题是批量获取局域网内的IP地址。在Windows操作系统中,可以通过命令行工具`arp`(Address Resolution Protocol)和`ping`来实现这一目标。`arp`命令可以显示或修改...

    高速IP地址扫描器

    【高速IP地址扫描器】是一种专门用于快速检测和识别网络中IP地址的工具。它能够帮助用户在短时间内遍历指定...总的来说,高速IP地址扫描器是网络管理与安全领域的重要工具,其有效使用有助于提升网络安全性及运维效率。

    校园网IP地址规划

    校园网通常会获得一定数量的公网IP地址,但这些地址数量有限,不足以覆盖所有内部设备。 - **私有IP地址**:非全球唯一,只能在特定范围内使用,通常用于内部网络。私有IP地址不会与公网IP地址发生冲突,是解决校园...

    自动填IP地址

    在IT领域,自动填IP地址是一项实用的技术,尤其对于网络管理员和频繁更换工作环境的用户而言,能够极大地提高效率。本文将深入探讨自动填IP地址的相关知识点,包括其原理、实现方式以及适用场景。 首先,我们需要...

    python如何判断IP地址合法性

    - Django是一个高级的Web框架,同样提供了获取用户IP地址的功能。 - 使用第三方库如`ipaddress`可以更方便地处理IP地址和子网掩码相关的计算。 总之,判断IP地址合法性主要涉及字符串处理、数字转换以及IP地址的...

    根据IP地址获取经纬度

    标题中的“根据IP地址获取经纬度”是指在Java编程环境下,通过特定的库或API来实现从IP地址解析出地理位置的经纬度坐标。这通常涉及到网络编程和地理信息系统(GIS)的技术。描述中提到的Java工程是实现这个功能的一...

    小瘦牛IP地址转换器

    【小瘦牛IP地址转换器】是一款专门用于切换和管理IP地址的软件工具,它能够帮助用户快速地在不同的IP地址之间进行切换,以满足在不同网络环境下的需求。这款软件在用户群体中有一定的实用性,虽然并非所有人都对其...

    获得访问者的IP地址

    本项目提供了一个解压后的程序,可以用于演示如何在Java Web环境中获取用户的IP地址。通过使用Eclipse集成开发环境(IDE)并运行内置的Tomcat服务器,我们可以轻松地实现这一功能。 首先,我们需要了解基本的Web...

    C# 判断输入的值是否是IP地址

    对于IP地址的有效性验证,可以使用正则表达式来精确地定义IPv4地址的格式。这种方式不仅简洁而且易于理解。 **示例代码**: ```csharp using System.Text.RegularExpressions; public bool IsValidIp(string ip) ...

    VC 获取公网 ip 地址

    本方法的核心在于通过访问一个能够返回用户公网 IP 地址的网站来间接获取当前的 IP 地址。在这个例子中,使用的网站是 `http://www.zu14.cn/ip/`,它会返回访问者的公网 IP 地址。 ```cpp CString m_szSite = ...

    IP地址计算器源代码 Visual Basic

    描述中的“IP地址计算器代码+程序”暗示我们不仅得到了源代码,还有编译后的可执行文件“IP地址计算.exe”,这意味着我们可以直接运行程序,而无需具备Visual Basic的编程环境。同时,这可能也是一个学习和研究VB...

    如何获得IP地址源程序(

    在主程序逻辑中调用`GetLocalIPAddress()`函数,将返回的IP地址显示在控制台或者用户界面中。 ```vb Sub Main() Dim ipAddress As String = GetLocalIPAddress() Console.WriteLine("本地IP地址: " & ipAddress...

    用Java编程获得本机和服务器IP地址

    同样,这里也可能会抛出`UnknownHostException`,如果提供的服务器域名无法解析为IP地址,需要对此异常进行适当的处理,例如记录日志或向用户显示错误信息。 需要注意的是,获取的IP地址可能是IPv4或IPv6格式,具体...

Global site tag (gtag.js) - Google Analytics