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; }
request.getRemoteAddr() 獲取的值為0:0:0:0:0:0:0:1的原因及解決辦法
1、把URL上的localhost改成127.0.0.1
2丶最近在進行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即可解決