`

Server获取客户端IP 工具类:IPUtil

阅读更多

一 概述

 

    获取客户端Ip工具类,支持client 和 server之间有代理的情况

 

二 代码

 

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;

/**
 * 获取client ip
 */
public class IpUtil {

    private static final String[] CONTAINS_IP_HEADERS = {
            "X-Forwarded-For"
            , "Proxy-Client-IP"
            , "WL-Proxy-Client-IP"
            , "HTTP_CLIENT_IP"
            , "HTTP_X_FORWARDED_FOR"
            , "HTTP_X_FORWARDED"
            , "HTTP_X_CLUSTER_CLIENT_IP"
            , "HTTP_FORWARDED_FOR"
            , "HTTP_FORWARDED"
            ,"HTTP_VIA"
            ,"REMOTE_ADDR"};


    /**
     * 获取client ip
     * @param request http 请求
     * @return client ip (ipv4 或ipv6)
     */
    public static String getClientIp(HttpServletRequest request) {

        String clientIp = getIpFromHttpHeader(request);
        if (StringUtils.isNotEmpty(clientIp)) {
            return clientIp;
        }

        return request.getRemoteAddr();
    }

    //从http头获取ip 用于优先支持有proxy的情况
    private static String getIpFromHttpHeader(HttpServletRequest request) {
        for (String header : CONTAINS_IP_HEADERS) {
            String clientIps = request.getHeader(header);

            if (StringUtils.isEmpty(clientIps)) {
                continue;
            }

            if (StringUtils.equalsIgnoreCase("unknown", clientIps)) {
                continue;
            }

            //根据代理协议,取第一为客户端ip
            if (!StringUtils.contains(clientIps, ",")) {
                return clientIps;
            }

            String[] ips = StringUtils.split(clientIps, ',');
            return ips[0];

        }
        return null;
    }

}

 

分享到:
评论

相关推荐

    .net获取客户端IP,Mac地址

    在.NET开发环境中,获取客户端的IP地址和MAC地址是常见的需求,这主要涉及到网络通信和系统编程的相关知识。本文将详细讲解如何在.NET中实现这一功能,并提供相关的代码示例。 首先,我们要明白IP地址和MAC地址的...

    获取客户端IP地址所需Jar包

    在开发Web服务时,有时我们需要获取调用服务的客户端的IP地址,以便进行日志记录、权限控制或者地理位置分析等操作。"获取客户端IP地址所需Jar包"这个主题,主要涉及的是在使用Apache Axis框架发布Web服务时,如何...

    sql server客户端连接工具

    SQL Server客户端连接工具是数据库管理员和开发人员用来与Microsoft SQL Server进行交互的重要工具。它提供了图形用户界面(GUI)和命令行选项,使得用户能够轻松地执行查询、管理数据库对象以及进行其他数据库维护...

    java Tcp 客户端工具类 java Tcp 客户端工具类

    java Tcp 客户端工具类 java Tcp 客户端工具类java Tcp 客户端工具类 java Tcp 客户端工具类java Tcp 客户端工具类 java Tcp 客户端工具类java Tcp 客户端工具类 java Tcp 客户端工具类java Tcp 客户端工具类 java ...

    JS获取客户端IP地址及MAC地址(转)

    在JavaScript中,获取客户端IP地址和MAC地址是一个相对复杂的过程,因为JavaScript的浏览器安全限制不允许直接访问客户端的MAC地址。然而,我们可以通过一些间接的方法来获取客户端的IP地址。在这个场景下,`...

    zookeeper客户端连接工具: zktools

    zktools是针对ZooKeeper开发的一款客户端连接工具,它使得与ZooKeeper交互变得更加便捷和高效。这款工具通常包含了一些实用的功能,如查看ZNode(ZooKeeper中的数据节点)信息,执行数据操作,监控会话状态,以及...

    IpUtils工具包 获取客户端IP 将IPv4地址转换成字节

    获取客户端IP 将IPv4地址转换成字节 获取主机名 从多级反向代理中获得第一个非unknown IP地址 检测参数是否在ip通配符里 校验ip是否符合过滤串规则

    方便好用Ms SqlServer客户端管理工具

    标题提到的“方便好用Ms SqlServer客户端管理工具”正是这样一款软件,它具备简洁的界面设计和易于上手的操作流程,使得用户可以轻松地管理和监控多个Ms SqlServer服务器。 首先,让我们关注一下描述中提及的关键...

    SQL+server+客户端网络实用工具独立包

    SQL Server 客户端网络实用工具独立包是一个包含了一系列用于管理和诊断SQL Server网络连接的工具集合。这个包对于SQL Server数据库管理员来说极其重要,因为它提供了对数据库服务器远程访问的配置和故障排查能力。...

    SQL Server客户端连接工具(面安装).zip

    SQL Server客户端连接工具是数据库管理员和开发人员用来与SQL Server交互的重要工具。在这个"SQL Server客户端连接工具(免安装)"的压缩包中,提供了一种无需完整安装即可使用的轻量级解决方案,对于那些不希望在系统...

    雄迈客户端及修改IP工具

    【雄迈客户端及修改IP工具】是针对雄迈品牌监控设备的一款综合管理软件,它集成了设备连接、视频查看、录像回放、IP地址修改等多种功能。在IT领域,这样的工具对于网络监控系统的管理和维护至关重要,尤其对于拥有...

    sql server客户端安装包

    SQL Server客户端安装包是用于与Microsoft SQL Server进行交互的软件组件集合,它包含了连接到SQL Server、执行查询、管理数据库以及进行数据导入导出等任务所需的工具。在本压缩包中,主要包含了一个名为"SQL ...

    SqlServer连接工具

    SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...

    C#代码:获得链接到WCF服务的WPF客户端的IP地址

    客户端通过引用服务的元数据(通常使用svcutil工具生成)来创建代理类,然后实例化这个代理并调用其方法。 要获取WCF客户端的IP地址,我们需要在服务端捕获请求上下文。在WCF中,`OperationContext`类提供了对当前...

    java各种工具类:精确的数学运算、将String进行base64编码解码、树的递归、判断是否为空等

    java各种工具类:精确的数学运算、将String进行base64编码解码、树的递归等 包含:ArithmeticUtils、Base64Util、BitConverterUtil、BuildTreeFor1077、CaculateDistanceUtil、CloseUtil、ConvertUtil、...

    ISCSI 客户端软件(微软:Initiator-2.08-build3825-x86fre)

    ISCSI(Internet Small Computer System Interface)是一种网络存储技术,它将SCSI协议封装在TCP/IP协议上,使得存储设备可以通过IP网络进行传输和访问。在本案例中,我们讨论的是微软提供的ISCSI客户端软件——...

    PHP 获取客户端的相关信息

    1. `$_SERVER['REMOTE_ADDR']`:这个常用来获取客户端的IP地址。然而,如果用户通过代理服务器访问,可能获取到的是代理服务器的IP,而非真实用户的IP。为获取真实IP,可以使用`$_SERVER['HTTP_X_FORWARDED_FOR']`,...

    \VS2012和SQL客户端在不同网络远程访问数据库SQLserver2005

    5. **客户端设置**:在路由器B下的笔记本电脑上,安装SQL Server 2005的客户端工具,如SQL Server Management Studio Express,用于远程连接。创建服务器别名,如“test”,指定服务器地址192.168.1.121,并选择TCP/...

    OPC-Server模拟器服务端 客户端

    "OPC-Server模拟器服务端" 是一个用于测试和开发的工具,它模拟了一个真实的OPC UA服务器。这种模拟器可以创建虚拟的数据源,生成各种模拟的工业数据,如温度、压力等,以便开发者在没有实际设备的情况下进行应用的...

    一件获取本机IP、主机名、和Mac地址小工具

    通过"一件获取本机IP、主机名、和Mac地址小工具",用户可以快速获取这些信息,对网络状态进行监控和诊断。对于IT专业人士来说,理解和掌握这些基础知识至关重要,因为它直接关系到网络的正常运行和问题排查。

Global site tag (gtag.js) - Google Analytics