java獲取ip爲0:0:0:0:0:0:0:1的問題【轉】

java獲取ip爲0:0:0:0:0:0:0:1的問題【轉】

0:0:0:0:0:0:0:1是ipv6的表現形式,對應ipv4來說相當於127.0.0.1,也就是本機

如果項目部署在本機win7系統,訪問時是通過 localhost 來訪問,

用java獲取ip地址可能會出現該問題,這時獲取的ip將是 0:0:0:0:0:0:0:1

 

要是機器在局域網中,訪問時使用自己的ip訪問,如 我的ip是 :192.168.123.156

訪問url:http://192.168.123.156:8080/test

這時候請求會經過路由器轉發,所以服務器獲取的就是本機的局域網內ip,在java中獲取的ip就是 192.168.123.156了

 

下面幾個獲取ip的方法:

複製代碼
    public static String getIP(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (!checkIP(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (!checkIP(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (!checkIP(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
    private static boolean checkIP(String ip) {
        if (ip == null || ip.length() == 0 || "unkown".equalsIgnoreCase(ip)
                || ip.split(".").length != 4) {
            return false;
        }
        return true;
    }
複製代碼

 

原文地址:http://blog.csdn.net/leoz0802/article/details/6364565

 

另一篇:http://java161.iteye.com/blog/1189279

request.getRemoteAddr() 獲取的值爲0:0:0:0:0:0:0:1的原因及解決辦法

最近在進行web開發時,在jsp頁面獲取服務器ip時,遇到了request.getRemoteAddr()獲取的值爲0:0:0:0:0:0:0:1,這是爲什麼呢,照道理講,應該是127.0.0.1纔對,爲什麼這個獲取的值變成了ipv6了呢,而且我發現這種情況只有在服務器和客戶端都在同一臺電腦上纔會出現(例如用localhost訪問的時候纔會出現),後來上網查了查原因,原來是/etc/hosts這個東西作怪(在windows上應該是C:\Windows\System32\drivers\etc\hosts這個文件),只需要註釋掉文件中的 # ::1 localhost 這一行即可解決問題。另外localhost這個文件很有用,這裏你可以添加自己的條目,例如添加 192.168.0.212 myweb 這樣子,在瀏覽器中原來只能使用192.168.0.212來訪問的,並可以使用myweb來進行替換。

如果還不能解決,本機訪問的時候用127.0.0.1或本機ip代替localhost即可解決

標籤: java
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章