2013-06-18 137 views
0

我希望得到一個客戶端的IP地址在遠程machine.I的IPv6正在使用此代碼:獲得的IPv4,而不是在JSF

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

+0

此問題與JSF根本無關。 –

+0

我知道,但我希望JSF必須解決這件事 –

+0

我希望你有這個代碼,防止客戶端鍛造這些標題的前面一些安全層的方法。 –

回答

0

如果你得到一個IPv6地址,則正在使用的IPv6。 IPv4和IPv6是不同的協議,當客戶端可用時,客戶端選擇使用哪一個協議。

如果你想要客戶的IPv4地址,那麼你可以強制他們使用它,而不是在DNS中通告IPv6地址。儘管隨着IPv6的部署日益增多,這將是一個糟糕的主意。支持兩者都很好,所以最好與使用IPv6的客戶打交道。

+0

謝謝你回答這個問題,但我怎麼能強制DNS不宣傳IPv6,我是新的DNS配置 –

+0

這完全取決於你的本地設置,所以我不能回答這個問題。您應該與您的DNS提供商交談。 –

相關問題