23

Client以下の方法でIPアドレスを取得しています:

public static String getClientIpAddr(HttpServletRequest request) {  
    String ip = request.getHeader("X-Forwarded-For");  
    ...
    return ip
} 

IPV4今、それがまたはであるかどうかを検出したいと思いますIPV6

4

3 に答える 3

41

InetAddress を作成し、それが ipv4 または ipv6 インスタンスになったかどうかを確認できます

InetAddress address = InetAddress.getByName(ip);
if (address instanceof Inet6Address) {
    // It's ipv6
} else if (address instanceof Inet4Address) {
    // It's ipv4
}

少し面倒なようですが、より良い解決策があることを願っています。

于 2013-08-07T12:06:15.443 に答える
10

IPv4 または IPv6 のいずれかを取得していることが確実な場合は、次のことを試すことができます。DNS 名がある場合、これはルックアップを実行しようとします。とにかく、これを試してください:

try {

    InetAddress address = InetAddress.getByName(myIpAddr);

    if (address instanceof Inet4Address) {
        // your IP is IPv4
    } else if (address instanceof Inet6Address) {
        // your IP is IPv6
    }

} catch(UnknownHostException e) {

    //  your address was a machine name like a DNS name, and couldn't be found

}
于 2013-08-07T12:18:05.320 に答える