獲取來訪者的真實IP

2021-05-24 09:24:29 字數 997 閱讀 9186

remote_addr只能獲取訪問者本地連線中設定的ip,如中南民族大學校園網中自己設定的10.x.***.***系列ip,而這個函式獲取的是區域網閘道器出口的ip位址,如民大校園網的出口ip 202.103.41.6

如果訪問者使用**伺服器,將不獲取**伺服器的ip,而是獲取訪問者閘道器的真實ip。如果將這個函式應用到限ip訪問的網頁中,別人即使通過限ip訪問段中的**伺服器,也不能訪問該頁面。

定義乙個函式getip()

function getip()

使用方法:

echo getip();

getenv("remote_addr")用來取得客戶端的 ip 位址,但如果客戶端是使用**伺服器來訪問,那取到的就是**伺服器的 ip 位址,而不是真正的客戶端 ip 位址。要想透過**伺服器取得客戶端的真實 ip 位址,就要使用 getenv("http_x_forwarded_for") 來讀取。

但是如果客戶端沒有通過**伺服器來訪問,那麼用getenv("http_x_forwarded_for") 取到的值將是空的。

表示如果getenv("http_x_forwarded_for") 取到的值存在不為空(即客戶端使用**伺服器的情況下),則變數$ip等於getenv("http_x_forwarded_for") 取到的真實ip值。

如果上面的else if(getenv("http_x_forwarded_for"))取得的值為空(即沒有使用**伺服器),則不會執行下面的$ip = getenv("http_x_forwarded_for");這一行語句。

這種情況下已經確認客戶端沒有使用**伺服器,從而通過

else if(getenv("remote_addr"))

$ip = getenv("remote_addr");

這兩行語句獲得客戶端的ip位址也是真實的ip位址。

Java獲取來訪者IP

在jsp裡,獲取客戶端的ip位址的方法是 request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,用request.getremoteaddr 方法獲取的ip位址是 127...

Java獲取來訪者IP

經過apache,squid等反向 軟體 以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的 ip,伺服器端應用也無法直接通過 請求的位址返回給客戶端。但是在 請求的http頭資訊中,增加了x forwarded for資訊。用以跟蹤原有的客戶端ip位址和原來客戶端請求的伺服器...

tomcat 獲取訪問者真實IP

通過下面這段 可以獲取 string ip request.getheader x forwarded for if ip null ip.length 0 unknown equalsignorecase ip if ip null ip.length 0 unknown equalsignore...