0

我想在远程机器上获取客户端的 IP 地址。我正在使用以下代码:

public static String getClientIpAddr(HttpServletRequest request) {
    String ip = request.getHeader("X-Forwarded-For");
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("HTTP_CLIENT_IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("HTTP_X_FORWARDED_FOR");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getRemoteAddr();
    }
    return ip;
}

但它总是返回IPv6,有没有办法拥有一个IPv4

4

1 回答 1

0

如果您获得 IPv6 地址,则使用的是 IPv6。IPv4 和 IPv6 是不同的协议,当两者都可用时,客户端会选择使用哪一个。

如果您想要客户端的 IPv4 地址,则可以通过不在 DNS 中通告 IPv6 地址来强制他们使用它。尽管随着 IPv6 的部署越来越多,这将是一个坏主意。支持两者都很好,因此最好与使用 IPv6 的客户端打交道。

于 2013-06-18T15:51:07.007 回答