从http协议中获得客户端ip

简介: import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; public final class InternetProtocol { private static Logger log = Logger.

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

public final class InternetProtocol {

private static Logger log = Logger.getLogger(InternetProtocol.class);
/**
 * 构造函数.
 */
private InternetProtocol() {
}

/**
 * 获取客户端IP地址.<br>
 * 支持多级反向代理
 * 
 * @param request
 *            HttpServletRequest
 * @return 客户端真实IP地址
 */
public static String getRemoteAddr(final HttpServletRequest request) {
    try{
        String remoteAddr = request.getHeader("X-Forwarded-For");
        // 如果通过多级反向代理,X-Forwarded-For的值不止一个,而是一串用逗号分隔的IP值,此时取X-Forwarded-For中第一个非unknown的有效IP字符串
        if (isEffective(remoteAddr) && (remoteAddr.indexOf(",") > -1)) {
            String[] array = remoteAddr.split(",");
            for (String element : array) {
                if (isEffective(element)) {
                    remoteAddr = element;
                    break;
                }
            }
        }
        if (!isEffective(remoteAddr)) {
            remoteAddr = request.getHeader("X-Real-IP");
        }
        if (!isEffective(remoteAddr)) {
            remoteAddr = request.getRemoteAddr();
        }
        return remoteAddr;
    }catch(Exception e){
        log.error("get romote ip error,error message:"+e.getMessage());
        return "";
    }
}

/**
 * 获取客户端源端口
 * @param request
 * @return
 */
public static Long getRemotePort(final HttpServletRequest request){
    try{
        String port = request.getHeader("remote-port");
        if( StringUtil.isNotEmptyString(port )) {
            try{
                return Long.parseLong(port);
            }catch(NumberFormatException ex){
                log.error("convert port to long error , port:    "+port);
                return 0l;
            }
        }else{
            return 0l;
        }        
    }catch(Exception e){
        log.error("get romote port error,error message:"+e.getMessage());
        return 0l;
    }
}

/**
 * 远程地址是否有效.
 * 
 * @param remoteAddr
 *            远程地址
 * @return true代表远程地址有效,false代表远程地址无效
 */
private static boolean isEffective(final String remoteAddr) {
    boolean isEffective = false;
    if ((null != remoteAddr) && (!"".equals(remoteAddr.trim()))
            && (!"unknown".equalsIgnoreCase(remoteAddr.trim()))) {
        isEffective = true;
    }
    return isEffective;
}

}

本地测试localhost会出现0:0:0:0:0:0:0:1

相关文章
|
2月前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
131 7
|
15天前
|
域名解析 缓存 网络协议
Web基础与HTTP协议
通过掌握这些基础知识和技术,开发者可以更加高效地构建和优化Web应用,提供更好的用户体验和系统性能。
65 15
|
10天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
16天前
免费HTTP代理IP对业务稳定性的影响关键因素分析
随着互联网发展,使用代理IP的需求增加。免费代理IP虽便捷,但对业务稳定性有负面影响:1. 网络连接不稳定,易中断;2. 频繁更换IP影响业务连续性;3. 性能差,速度慢、响应延迟高;4. 服务质量低,缺乏技术支持且存在不受控的限制。因此,选择代理服务时需谨慎评估其对业务的影响。
54 13
|
12天前
|
数据采集 安全 搜索推荐
HTTP代理IP纯净度 提升用户网络体验的核心竞争力
随着互联网发展,使用HTTP动态代理IP的需求日益增加。高纯净度的代理IP在隐私与安全、网络体验和业务运营方面至关重要。它能保护用户信息、提高数据安全性、确保访问速度和连接稳定,并提升业务效率与信誉度。
35 2
|
13天前
|
缓存 网络协议 算法
从零开始掌握HTTP协议
本文介绍HTTP协议的演变,从HTTP1.0到HTTP2.0。HTTP1.0为无状态连接,每次请求独立;HTTP1.1引入持久连接、管道化请求和更多状态码;HTTP2.0采用二进制分帧、多路复用、头部压缩及服务器主动推送,大幅提升性能与用户体验。了解这些区别有助于开发者优化应用和服务。
|
13天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
62 1
|
24天前
|
负载均衡 监控 安全
HTTP代理IP的安全与稳定技术与策略的结合
随着科技与互联网的发展,企业对代理的需求日益增长。为加强HTTP代理IP的安全性和稳定性,可采取用户教育、使用加密协议、定期更换IP、监控可用性、设置访问控制、负载均衡、配置防火墙及定期更新维护等措施。这些方法能有效提升代理服务的安全性和可靠性。
24 7
|
23天前
|
定位技术 数据安全/隐私保护
如何评估HTTP代理IP的性能?
随着互联网技术的发展,使用代理IP的人越来越多。选择HTTP代理IP时,需注意速度和稳定性、用户信息保护、地域性、带宽上限、支持的协议、客户支持、用户评价和信誉、价格和性价比等方面。希望这些建议能帮助大家做出合适的选择。
36 1
|
23天前
|
安全 UED
HTTP 代理 IP 使用中的速度与安全性的权衡
随着科技和互联网的发展,越来越多企业使用代理服务。本文介绍了用户使用HTTP代理IP后体验感变差的几个原因,包括延迟增加、带宽上限、服务器负载高、数据包丢失、安全性问题和兼容性问题。希望这些信息能帮助用户解决问题。
36 1