`

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;
    }

}

 

分享到:
评论

相关推荐

    IP工具类,通过传入的request获取ip地址(JAVA)

    在IT行业中,尤其是在Web开发领域,获取客户端的IP地址是一项常见的任务。这有助于跟踪用户行为、提供地域针对性的服务,甚至进行安全防护。本篇文章将详细解释如何在Java环境下,通过Servlet和Reactive编程模型来...

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

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

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

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

    PHP 获取客户端IP

    在这种情况下,可以尝试使用其他`$_SERVER`变量来获取真实的客户端IP: 1. `$_SERVER['HTTP_CLIENT_IP']`: 如果HTTP_X_FORWARDED_FOR头被设置,这个变量可能包含客户端IP。 2. `$_SERVER['HTTP_X_FORWARDED']`: ...

    sql server 网络客户端实用工具

    3. **SQL Server客户端连接组件**: 包括SQL Native Client、ODBC驱动程序和OLE DB提供程序,它们是客户端应用程序连接SQL Server的基础。这些组件支持不同的连接字符串语法,允许用户指定服务器名称、数据库、身份...

    三菱FX5U PLC Modbus TCP协议服务器与客户端案例程序详解:含调试工具与通讯协议配置注解,三菱FX5U PLC的Modbus TCP协议服务器与客户端案例程序详解:包含调试工具、程序注解

    三菱FX5U PLC Modbus TCP协议服务器与客户端案例程序详解:含调试工具与通讯协议配置注解,三菱FX5U PLC的Modbus TCP协议服务器与客户端案例程序详解:包含调试工具、程序注解及通讯协议配置指南,三菱FX5U modbus tcp...

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

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

    ASPdotnet获得客户端的IP

    至于"网络信息采集发布工具V7.0最新版.exe",这可能是一个用于数据采集和发布的工具,可能与获取客户端IP地址无关,但可能需要集成到ASP.NET应用中,以实现自动化信息收集和发布功能。在实际开发中,这样的工具能够...

    一款免安装sqlserver客户端管理工具,好用

    标题中的“一款免安装sqlserver客户端管理工具,好用”指的是SqlDbxPersonal,这是一款专为SQL Server设计的轻量级、无需安装的数据库管理工具。它允许用户方便地进行SQL查询、数据库管理和开发工作,而无需经历传统...

    IP地址HTTP请求工具类

    获取本地IP地址,获取本地Host名称,获取Linux下的IP地址,获取用户真实IP地址,get/post请求 相应的工具类

    zookeeper客户端连接工具: zktools

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

    SQLServer客户端连接工具(支持2000,20005,2008)

    支持数据库版本2000 2005 2008

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

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

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

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

    SQL Server客户端工具(WPF,开源)

    【SQL Server客户端工具】是一个基于WPF(Windows Presentation Foundation)技术开发的应用程序,专为管理和操作SQL Server数据库设计。此工具由VS2010(Visual Studio 2010)构建,它提供了全面的功能,使得用户...

    sql server客户端安装包

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

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

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

    OPC Server仿真模拟器 opc客户端调试好工具

    OPC Server是实现这一标准的关键组件,它提供了与设备或系统的连接,而OPC客户端则通过OPC Server获取或写入数据。在开发和调试OPC客户端程序时,一个可靠的OPC Server仿真模拟器是必不可少的工具。 标题提到的...

    64位sqlserver数据库客户端工具SQLManagementStudio_x64_CHS

    《64位SQL Server数据库客户端工具SQL Management Studio详解》 SQL Server Management Studio(简称SSMS)是Microsoft开发的一款强大的数据库管理工具,专为64位操作系统设计,用于管理和配置SQL Server环境。它...

    redis客户端连接工具 RedisDesktopManager

    总之,RedisDesktopManager作为一款强大的Redis客户端工具,简化了Redis的管理和操作,提高了开发和运维效率。无论是初学者还是经验丰富的开发者,都能从中受益。在实际工作中,结合Redis的各种特性和RedisDesktop...

Global site tag (gtag.js) - Google Analytics