環境:
tomcat5.6
JSP
UTF-8
IP協議:IPv4,IPv6
服務器和訪問者在同一機器上。
問題描述
上傳文件時,爲了避免文件名重複,打算利用IP地址+時間戳的方式和給文件命名。但是,從本機上訪問本機服務器時,利用request.getRemoteAddr()函數獲取IP地址,得到的是0:0:0:0:0:0:0:1。因爲是按IPv4的方式和解析的,所以使得保存文件失敗。
原因及解決方案
因爲機器上啓用的IPv6協議,所以在對localhost進DNS解析時,得到的是IPv6形式的本機地址0:0:0:0:0:0:0:1。因此在利用http://localhost:8080/demo/ 訪問時,request.getRemoteAddr()函數纔會得到上面的結果。可以修改hosts文件。位置:C:\Windows\System32\drivers\etc。添加上一句127.0.0.1 localhost,這樣request.getRemoteAddr()函數得到的將是127.0.0.1。此外,利用別的機器來訪問本機服務器,則不會出現上述上問題,能夠取得它的IPv4地址。對於網上所說的因爲tomcat的反向代理,使得request.getRemoteAddr()無法獲得客戶端真實IP的問題,我目前還不是很理解。
關於hosts文件
hosts文件相當於一個位於本地的IP地址到域名的映射文件,可以提供DNS解析。如果想訪問的網站被域名污染(域名劫持),可以預先將IP,域名對寫入hosts文件。