如何从HttpServletRequest中获取外网IP地址
2016-07-15 15:44
537 查看
如何从HttpServletRequest中获取外网IP地址
Java 中可以通过HttpServletRequest类的getRemoteAddr();//可能是用户真是ip也可能是代理服务器的ip String client_ip=request.getRemoteAddr();
如果经过了中间层通过该方法无法直接获取ip,此时需要从HTTP请求的Header里面获取ip
String ip = request.getRemoteAddr(); /** * X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP * 只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项 * 标准格式如下:X-Forwarded-For: client_ip, proxy1_ip, proxy2_ip * 此头是可构造的,因此某些应用中应该对获取到的ip进行验证 */ if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("x-forwarded-for"); } /** *在多级代理网络中,直接用getHeader("x-forwarded-for")可能获取到的是unknown信息 *此时需要获取代理代理服务器重新包装的HTTP头信息, */ if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { //Apache+WebLogic搭配下出现的头 ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknow".equalsIgnoreCase(ip)) { //Apache+WebLogic搭配下出现的头 ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { //可通过http头伪造,是由代理服务器发送的请求头 ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { //可通过http头伪造,和X-Forwarded-For格式类似,以“,"分隔 ip = request.getHeader("HTTP_X_FORWARDED_FOR"); }
今天有用到,自己打号备忘!
相关文章推荐
- 获取本机名及IP地址
- mac连接网络以后网络不好用
- linux无线网络配置
- Linux 网络配置
- TCP/UDP报文格式
- Android 中 HttpURLConnection 使用详解
- Java网络编程的开始
- TCP/IP协议 三次握手和四次挥手
- 捕获异常、存sd卡、自定义封装json(含网络工具类)、生成Json格式、传log日志到服务器、app崩溃友好重启
- nginx 1.9 tcp stream 4层负载均衡
- php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别
- Python网络编程—socket(二)
- 上传利器http://www.uploadify.com/demo
- HttpSessionListener
- Android网络编程-HTTP协议(超文本传输协议)原理
- 超级详细Tcpdump 的用法
- retrofit2 使用教程 及 Android 网络架构搭建 (原创)
- (转)TCP三次握手四次挥手
- 动手实践虚拟网络 - 每天5分钟玩转 OpenStack(10)
- KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)