PHP獲取客戶端IP

2021-08-31 06:25:02 字數 2281 閱讀 4287

在這篇文章中,我們將會為大家詳細介紹php獲取客戶端ip的幾種情況分析。我們在使用php獲取的ip可能是客戶端真實的ip,也可能是**伺服器的ip,也有可能根本取不到任何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的**可以如下:

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, ','))   $ip = reset(explode(',', $ip));    return $ip;   }  

php獲取客戶端ip時另外一點需注意,使用函式getenv(』http_x_forwarded_for』)或getenv(』remote_addr』) 也可以如上**一樣取得同樣的效果。但getenv()不支援在iis的isapi方式下執行的php。

PHP獲取客戶端IP

在php獲取客戶端ip中常使用 server remote addr 但如果客戶端是使用 伺服器來訪問,那取到的是 伺服器的 ip 位址,而不是真正的客戶端 ip 位址。要想透過 伺服器取得客戶端的真實 ip 位址,就要使用 server http x forwarded for 來讀取。但只有客戶...

php獲取客戶端IP

方法1 function get real ip 多重 伺服器下的客戶端真實ip位址 可能偽造 如果沒有使用 此字段為空 客戶端ip 或 最後乙個 伺服器 ip return ip ip server remote addr 方法2 獲取客戶端ip位址 param integer type 返回型別...

PHP獲取客戶端IP

remote addr 是你的客戶端跟你的伺服器 握手 時候的ip。如果使用了 匿名 remote addr將顯示 伺服器的ip 在nginx中可以使用proxy set header x forwarded for remote addr 來解決 http client ip 是 伺服器傳送的ht...