request.getRemoteAddr()獲取ip地址時得到的值是0:0:0:0:0:0:0:1原因和解決方法
專案場景:
使用request.getRemoteAddr()獲取ip地址,這個只是需求中的一個,像獲取id,登陸使用者名稱,使用者ip,登陸登出日誌,使用者訪問了哪些方法,做了什麼事情,總體來說就是使用者登入登出日誌,監控用的。現在的專案一般都是使用了Nignx等反向代理的。
問題描述:
在使用request.getRemoteAddr()獲取ip地址的時候得到的值是[0:0:0:0:0:0:0:1],這個是我在做需求測試的時候發現後臺日誌返回的ip地址長這個樣子,所以研究了一下。
原因分析:
0:0:0:0:0:0:0:1是屬於ipv6,後來我又進行另一臺電腦做測試,發現這種情況只有在伺服器和客戶端都在同一臺電腦上才會出現(例如用localhost訪問的時候才會出現
解決方案:
註釋掉C:\Windows\System32\drivers\etc\hosts檔案裡的# ::1 localhost這行即可解決問題。網上這種方式可以,我去找到這個檔案發現裡面是沒有這一行內容的。
最有效的方式就是改變請求的ip,不要使用localhost:8080
使用127.0.0.1:8080或者ip:8080。
上面已經解釋完畢,另外多寫一些方便更深入的理解。
jsp頁面中用request.getRemoteAddr()獲取的IP地址竟然為0:0:0:0:0:0:0:1 換臺機器IP顯示正常,這是為什麼呢,照道理講,應該是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來進行替換。
我用的win7系統 同樣遇到此問題,開啟檔案發現 # ::1 localhost 已註釋 沒有解決問題;後來強制改成
127.0.0.1 localhost
# 127.0.0.1 activate.adobe.com
# ::1 localhost
修改儲存之後只要重啟一下Tomcat伺服器就可以啦。
ps:
在IPv6的單播地址中有兩種特殊地址,0:0:0:0:0:0:0:0
全零(可簡寫為::)的地址叫未指定地址,一般不分配給主機
和0:0:0:0:0:0:0:1, (可簡寫為::1)的地址叫環回地址,用來檢測本主機協議是否正確安裝
參考內容:
https://blog.csdn.net/liquid_road/article/details/117404500
https://www.cnblogs.com/m3Lee/p/3808002.html