深入分析幾種PHP獲取客戶端IP的情況轉

2021-09-06 12:35:23 字數 2060 閱讀 8225

轉 

function

getip()

elseif ( isset($_server['remote_addr']) && $_server['remote_addr'] && strcasecmp($_server['remote_addr'], $unknown

) )

/*處理多層**的情況

或者使用正則方式:$ip = preg_match("/[\d\.]

/", $ip, $matches) ? $matches[0] : $unknown;

*/if (false !== strpos($ip, ','))

return

$ip;

}

在php獲取客戶端ip中常使用 $_server["remote_addr"] 。但如果客戶端是使用**伺服器來訪問,那取到的是**伺服器的 ip 位址,而不是真正的客戶端 ip 位址。要想透過**伺服器取得客戶端的真實 ip 位址,就要使用 $_server["http_x_forwarded_for"] 來讀取。

但只有客戶端使用「透明**」的情況下,$_server["http_x_forwarded_for"] 的值才是客戶端真正的ip(如果是多層**,該值可能是由客戶端真正ip和多個**伺服器的ip組成,由逗號「,」分隔),而在「匿名**」、「欺騙性**」的情況下是**伺服器的ip值(如果是多層**,該值可能由多個**伺服器的ip組成,由逗號「,」分隔),在「高匿名**」的情況下是空值。

關於http頭資訊中的remote_addr、http_forwarded_for值,我們在下文中有詳細的介紹,假設客戶端真實ip是221.5.252.160:

一、沒有使用**伺服器的php獲取客戶端ip情況:

remote_addr = 客戶端ip

http_x_forwarded_for = 沒數值或不顯示

二、使用透明**伺服器的情況:transparent proxies

remote_addr = 最後乙個**伺服器 ip

http_x_forwarded_for = 客戶端真實 ip (經過多個**伺服器時,這個值類似:221.5.252.160, 203.98.182.163, 203.129.72.215)

這類**伺服器還是將客戶端真實的ip傳送給了訪問物件,無法達到隱藏真實身份的目的。

三、使用普通匿名**伺服器的php獲取客戶端ip情況:anonymous proxies

remote_addr = 最後乙個**伺服器 ip

http_x_forwarded_for = **伺服器 ip (經過多個**伺服器時,這個值類似:203.98.182.163, 203.98.182.163, 203.129.72.215)

這種情況下隱藏了客戶端的真實ip,但是向訪問物件透露了客戶端是使用**伺服器訪問它們的。

四、使用欺騙性**伺服器的情況:distorting proxies

remote_addr = **伺服器 ip

http_x_forwarded_for = 隨機的 ip(經過多個**伺服器時,這個值類似:220.4.251.159, 203.98.182.163, 203.129.72.215)

這種情況下同樣透露了客戶端是使用了**伺服器,但編造了乙個虛假的隨機ip(220.4.251.159)代替客戶端的真實ip來欺騙它。

五、使用高匿名**伺服器的php獲取客戶端ip情況:high anonymity proxies (elite proxies)

remote_addr = **伺服器 ip

http_x_forwarded_for = 沒數值或不顯示

無論是remote_addr還是http_forwarded_for,這些頭訊息未必能夠取得到,因為不同的瀏覽器不同的網路裝置可能傳送不同的ip頭訊息。因此php使用$_server["remote_addr"] 、$_server["http_x_forwarded_for"] 獲取的值可能是空值也可能是「unknown」值。

PHP獲取客戶端IP 深入分析

php獲取客戶端ip的情況分為 沒有使用 伺服器的情況 使用透明 伺服器的情況 使用普通匿名 伺服器的情況 使用欺騙性 伺服器的情況 使用高匿名 伺服器的情況。在這篇文章中,我們將會為大家詳細介紹php獲取客戶端ip的幾種情況分析。我們在使用php獲取的ip可能是客戶端真實的ip,也可能是 伺服器的...

深入分析幾種PHP獲取客戶端IP的情況

在這篇文章中,我們將會為大家詳細介紹php獲取客戶端ip的幾種情況分析。我們在使用php獲取的ip可能是客戶端真實的ip,也可能是 伺服器的ip,也有可能根本取不到任何ip值。在php獲取客戶端ip中常使用 server remote addr 但如果客戶端是使用 伺服器來訪問,那取到的是 伺服器的...

分析php獲取客戶端ip

用php能獲取客戶端ip,這個大家都知道,如下 獲取客戶端ip ip位址合法驗證 long sprintf u ip2long ip ip long array ip,long array 0.0.0.0 0 return ip type 雖然這個非常非常的簡單,但是php本就是伺服器端語言,為什麼...