原文:https://www.cnblogs.com/powerwu/articles/12978664.html

偶然看到一条命令可以获取访问者的真实 IP,就想自己实现一下。

命令如下:

curl icanhazip.com

我是用的 Java 程序 + Nginx 实现的,没什么难度,但是 Nginx 的配置是关键,否则永远获取不到真实的地址。

准备获取 IP 工具类

上网搜 Java 怎么获取用户 IP,全是下面的代码,拿着用就行。

public class IpUtil {    public static String getIpAddr(HttpServletRequest request) {        String ipAddress = null;        try {
            ipAddress = request.getHeader("x-forwarded-for");            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("Proxy-Client-IP");            }            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("WL-Proxy-Client-IP");            }            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getRemoteAddr();                if (ipAddress.equals("127.0.0.1")) {                    // 根据网卡取本机配置的IP                    InetAddress inet = null;                    try {
                        inet = InetAddress.getLocalHost();                    } catch (UnknownHostException e) {
                        e.printStackTrace();                    }
                    ipAddress = inet.getHostAddress();                }            }            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割            if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()                // = 15                if (ipAddress.indexOf(",") > 0) {
                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));                }

偶然看到一条命令可以获取访问者的真实 IP,就想自己实现一下。

命令如下:

curl icanhazip.com

我是用的 Java 程序 + Nginx 实现的,没什么难度,但是 Nginx 的配置是关键,否则永远获取不到真实的地址。

准备获取 IP 工具类

上网搜 Java 怎么获取用户 IP,全是下面的代码,拿着用就行。

public class IpUtil {    public static String getIpAddr(HttpServletRequest request) {        String ipAddress = null;        try {
            ipAddress = request.getHeader("x-forwarded-for");            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("Proxy-Client-IP");            }            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("WL-Proxy-Client-IP");            }            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getRemoteAddr();                if (ipAddress.equals("127.0.0.1")) {                    // 根据网卡取本机配置的IP                    InetAddress inet = null;                    try {
                        inet = InetAddress.getLocalHost();                    } catch (UnknownHostException e) {
                        e.printStackTrace();                    }
                    ipAddress = inet.getHostAddress();                }            }            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割            if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()                // = 15                if (ipAddress.indexOf(",") > 0) {
                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));                }