获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;相关的知识,希望对你有一定的参考价值。

 1 package com.utils;
 2 
 3 import org.slf4j.Logger;
 4 import org.slf4j.LoggerFactory;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import java.io.IOException;
 8 
 9 /**
10  * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
11  * 
12  */
13 public final class NetworkUtil {
14 
15     private static final Logger LOG = LoggerFactory.getLogger(NetworkUtil.class);
16 
17     public final static String getIpAddress(HttpServletRequest request)
18             throws IOException {
19 
20         String ip = request.getHeader("X-Forwarded-For");
21 
22 //        LOG.info("getIpAddress(HttpServletRequest) - X-Forwarded-For - String ip= {}" ,ip);
23 
24         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
25             if (ip == null || ip.length() == 0
26                     || "unknown".equalsIgnoreCase(ip)) {
27                 ip = request.getHeader("Proxy-Client-IP");
28 //                LOG.info("getIpAddress(HttpServletRequest) - Proxy-Client-IP - String ip= {}" , ip);
29             }
30             if (ip == null || ip.length() == 0
31                     || "unknown".equalsIgnoreCase(ip)) {
32                 ip = request.getHeader("WL-Proxy-Client-IP");
33 //                LOG.info("getIpAddress(HttpServletRequest) - WL-Proxy-Client-IP - String ip= {}" , ip);
34             }
35             if (ip == null || ip.length() == 0
36                     || "unknown".equalsIgnoreCase(ip)) {
37                 ip = request.getHeader("HTTP_CLIENT_IP");
38 //                LOG.info("getIpAddress(HttpServletRequest) - HTTP_CLIENT_IP - String ip= {}" , ip);
39             }
40             if (ip == null || ip.length() == 0
41                     || "unknown".equalsIgnoreCase(ip)) {
42                 ip = request.getHeader("HTTP_X_FORWARDED_FOR");
43 //                LOG.info("getIpAddress(HttpServletRequest) - HTTP_X_FORWARDED_FOR - String ip= {}" , ip);
44             }
45             if (ip == null || ip.length() == 0
46                     || "unknown".equalsIgnoreCase(ip)) {
47                 ip = request.getRemoteAddr();
48 //                LOG.info("getIpAddress(HttpServletRequest) - getRemoteAddr - String ip= {}" , ip);
49             }
50         } else if (ip.length() > 15) {
51             String[] ips = ip.split(",");
52             for (int index = 0; index < ips.length; index++) {
53                 String strIp = (String) ips[index];
54                 if (!("unknown".equalsIgnoreCase(strIp))) {
55                     ip = strIp;
56                     break;
57                 }
58             }
59         }
60         return ip;
61     }
62 }

 

以上是关于获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;的主要内容,如果未能解决你的问题,请参考以下文章

PHP获取用户真实IP地址

Java获取请求客户端的真实IP地址

多级反向代理下,Java获取请求客户端的真实IP地址多种方法整合

多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

AWS - 防火墙管理器 - WAF 规则如何阻止来自 IP 地址的请求(无主机名)?

虚拟机网络已连接 ,但无法访问网页(上网)为啥???