如何使用php解析純真ip,php 解析

本文目錄一覽:

PHP如何獲取用戶的真實IP?

php獲取用戶真實ip的方法:

方法1:

//獲取REMOTE_ADDR屬性,直接可以得到ip

$ip = $_SERVER[“REMOTE_ADDR”];

echo $ip;

方法2:

//從Server中獲取HTTP_VIA,如果獲取到就用HTTP_X_FORWARDED_FOR的值替換,如果獲取不到就取REMOTE_ADDR的值。

$user_IP = ($_SERVER[“HTTP_VIA”]) ? $_SERVER[“HTTP_X_FORWARDED_FOR”] :

$_SERVER[“REMOTE_ADDR”];

$user_IP = ($user_IP) ? $user_IP : $_SERVER[“REMOTE_ADDR”];

echo $user_IP;

方法3:

function getRealIp()

{

$ip=false; //初始化ip為false

if(!empty($_SERVER[“HTTP_CLIENT_IP”])){ //如果HTTP_CLIENT_IP不為空

$ip = $_SERVER[“HTTP_CLIENT_IP”]; //獲取HTTP_CLIENT_IP的值

}

if (!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])) { //如果HTTP_X_FORWARDED_FOR不為空

$ips = explode (“, “, $_SERVER[‘HTTP_X_FORWARDED_FOR’]);

//把HTTP_X_FORWARDED_FOR的值用,分割後存放數組ips

if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }//遍歷處理

for ($i = 0; $i count($ips); $i++) {

if (!eregi (“^(10│172.16│192.168).”, $ips[$i])) {

$ip = $ips[$i]; //獲得真實ip

break;

}

}

}

return ($ip ? $ip : $_SERVER[‘REMOTE_ADDR’]);

}

echo getRealIp();

php 獲取真實IP,區分代理IP

使用php獲取IP的方法能找到很多。

function getIp(){

if (getenv(“HTTP_CLIENT_IP”) strcasecmp(getenv(“HTTP_CLIENT_IP”), “unknown”))

$ip = getenv(“HTTP_CLIENT_IP”);

else if (getenv(“HTTP_X_FORWARDED_FOR”) strcasecmp(getenv(“HTTP_X_FORWARDED_FOR”), “unknown”))

$ip = getenv(“HTTP_X_FORWARDED_FOR”);

else if (getenv(“REMOTE_ADDR”) strcasecmp(getenv(“REMOTE_ADDR”), “unknown”))

$ip = getenv(“REMOTE_ADDR”);

else if (isset($_SERVER[‘REMOTE_ADDR’]) $_SERVER[‘REMOTE_ADDR’] strcasecmp($_SERVER[‘REMOTE_ADDR’], “unknown”))

$ip = $_SERVER[‘REMOTE_ADDR’];

else

$ip = “unknown”;

return($ip);

}

對這段代碼進行解釋,這裡用到了兩個函數,getenv()和strcasecmp(),前一個函數獲取得系統的環境變數,如果能取到值,則返回該值,不能則返回false.

$_SERVER是伺服器超級全局變數數組,用$_SERVER[‘REMOTE_ADDR’]同樣可以獲取到客戶端的IP地址.二者的區別在於,getenv不支持IIS的isapi方式運行的php.

strcasecmp(string1,string2)字元串函數的用法是把string1和string2進行比較,如果相等返回0,如果string1大於string2,返回大於0的數,小於則返回小於0的數.

函數先使用客戶IP,如果不成立嘗試用代理的方法,如果不行,再使用REMOTE_ADDR。

php怎樣獲取用戶真實ip?

獲取客戶端ip其實不是個簡單的事兒,因為存在IP欺騙,和代理問題,所以獲取客戶端的IP的真實性會打折扣的,不能百分百準確。但是我們還是可以盡量寫一些比較完善的獲取客戶端真正ip方法。使用php獲取IP的方法能有很多,我簡單給個例子:

?php

function getip() { 

     $unknown = ‘unknown’; 

     if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR’])  $_SERVER[‘HTTP_X_FORWARDED_FOR’]  strcasecmp($_SERVER[‘HTTP_X_FORWARDED_FOR’], $unknown)){ 

         $ip = $_SERVER[‘HTTP_X_FORWARDED_FOR’]; 

     }elseif(isset($_SERVER[‘REMOTE_ADDR’])  $_SERVER[‘REMOTE_ADDR’]  strcasecmp($_SERVER[‘REMOTE_ADDR’], $unknown)) { 

         $ip = $_SERVER[‘REMOTE_ADDR’]; 

     } 

     /**

      * 處理多層代理的情況

      * 或者使用正則方式:$ip = preg_match(“/[\d\.]{7,15}/”, $ip, $matches) ? $matches[0] : $unknown;

      */

     if (false !== strpos($ip, ‘,’)) $ip = reset(explode(‘,’, $ip)); 

     return $ip; 

?

1、沒有使用代理的情況

REMOTE_ADDR = 客戶端IP

    HTTP_X_FORWARDED_FOR = 沒數值或不顯示

2、使用透明代理的情況

REMOTE_ADDR = 最後一個代理伺服器 IP

    HTTP_X_FORWARDED_FOR = 客戶端真實 IP (經過多個代理伺服器時,這個值類似:        221.5.252.160, 203.98.182.163, 203.129.72.215)

    這類代理伺服器還是將客戶端真實的IP發送給了訪問對象,無法達到隱藏真實身份的目的.

3、使用普通的匿名代理

REMOTE_ADDR = 最後一個代理伺服器 IP

    HTTP_X_FORWARDED_FOR = 代理伺服器 IP (經過多個代理伺服器時,這個值類似:        203.98.182.163, 203.98.182.163, 203.129.72.215)

    這種情況下隱藏了客戶端的真實IP,但是向訪問對象透露了客戶端是使用代理伺服器訪問它        們的.

4、使用欺騙性代理伺服器

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來欺騙它.

5、使用高級匿名代理伺服器

REMOTE_ADDR = 代理伺服器 IP

    HTTP_X_FORWARDED_FOR = 沒數值或不顯示,也可能是unknown

php獲取本機真實IP地址實例代碼

本文實例為大家分享了php獲取本機真實IP地址實例代碼,供大家參考。

主要是獲取操作系統為win2000/xp、win7的本機IP真實地址,和獲取操作系統為linux類型的本機IP真實地址,具體內容如下

function

getLocalIP()

{

$preg

=

“/\A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\Z/”;

//獲取操作系統為win2000/xp、win7的本機IP真實地址

exec(“ipconfig”,

$out,

$stats);

if

(!empty($out))

{

foreach

($out

AS

$row)

{

if

(strstr($row,

“IP”)

strstr($row,

“:”)

!strstr($row,

“IPv6”))

{

$tmpIp

=

explode(“:”,

$row);

if

(preg_match($preg,

trim($tmpIp[1])))

{

return

trim($tmpIp[1]);

}

}

}

}

//獲取操作系統為linux類型的本機IP真實地址

exec(“ifconfig”,

$out,

$stats);

if

(!empty($out))

{

if

(isset($out[1])

strstr($out[1],

‘addr:’))

{

$tmpArray

=

explode(“:”,

$out[1]);

$tmpIp

=

explode(“

“,

$tmpArray[1]);

if

(preg_match($preg,

trim($tmpIp[0])))

{

return

trim($tmpIp[0]);

}

}

}

return

‘127.0.0.1’;

}

以上就是本文的全部內容,希望對大家的學習有所幫助。

PHP如何獲取真實IP地址

//最簡單獲取ip地址代碼一句實例

$reIP=$_SERVER[“REMOTE_ADDR”];

echo $reIP;

//

//php教程獲取ip的演算法

if(getenv(HTTP_CLIENT_IP)) {

$onlineip = getenv(HTTP_CLIENT_IP);

} elseif(getenv(HTTP_X_FORWARDED_FOR)) {

$onlineip = getenv(HTTP_X_FORWARDED_FOR);

} elseif(getenv(REMOTE_ADDR)) {

$onlineip = getenv(REMOTE_ADDR);

} else {

$onlineip = $HTTP_SERVER_VARS[REMOTE_ADDR];

}

echo $onlineip;

//可以分出內網與外網站ip地址獲取程序

function getip_out(){

$ip=false;

if(!empty($_SERVER[“HTTP_CLIENT_IP”])){

$ip = $_SERVER[“HTTP_CLIENT_IP”];

}

if (!empty($_SERVER[HTTP_X_FORWARDED_FOR])) {

$ips教程 = explode (“, “, $_SERVER[HTTP_X_FORWARDED_FOR]);

if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }

for ($i = 0; $i count($ips); $i++) {

if (!eregi (“^(10│172.16│192.168).”, $ips[$i])) {

$ip = $ips[$i];

break;

}

}

}

return ($ip ? $ip : $_SERVER[REMOTE_ADDR]);

}

echo getip_out();

//php獲取ip的演算法,用了?號表達式來處理

$user_IP = ($_SERVER[“HTTP_VIA”]) ? $_SERVER[“HTTP_X_FORWARDED_FOR”] : $_SERVER[“REMOTE_ADDR”];

$user_IP = ($user_IP) ? $user_IP : $_SERVER[“REMOTE_ADDR”];

希望會對你有所幫助

PHP如何獲取客戶端真實IP

.X.XXX.XXX系列IP,而這個函數獲取的是區域網網關出口的IP地址,如果訪問者使用代理伺服器,將不獲取代理伺服器的IP,而是獲取訪問者網關的真實IP。如果將這個函數應用到限IP訪問的網頁中,別人即使通過限IP訪問段中的代理伺服器,也不能訪問該頁面。下面提供一個函數:?php// 定義一個函數getIP()function getIP(){global $ip;if (getenv(“HTTP_CLIENT_IP”))$ip = getenv(“HTTP_CLIENT_IP”);else if(getenv(“HTTP_X_FORWARDED_FOR”))$ip = getenv(“HTTP_X_FORWARDED_FOR”);else if(getenv(“REMOTE_ADDR”))$ip = getenv(“REMOTE_ADDR”);else$ip = “Unknow”;return $ip;}// 使用方法:echo getIP();?getenv(“REMOTE_ADDR”)用來取得客戶端的 IP 地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理伺服器取得客戶端的真實 IP 地址,就要使用 getenv(“HTTP_X_FORWARDED_FOR”) 來讀取。但是如果客戶端沒有通過代理伺服器來訪問,那麼用getenv(“HTTP_X_FORWARDED_FOR”) 取到的值將是空的。else if(getenv(“HTTP_X_FORWARDED_FOR”))$ip = 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地址也是真實的IP地址。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239179.html

(1)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:15
下一篇 2024-12-12 12:15

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • 如何使用Python獲取某一行

    您可能經常會遇到需要處理文本文件數據的情況,在這種情況下,我們需要從文本文件中獲取特定一行的數據並對其進行處理。Python提供了許多方法來讀取和處理文本文件中的數據,而在本文中,…

    編程 2025-04-29
  • 如何使用jumpserver調用遠程桌面

    本文將介紹如何使用jumpserver實現遠程桌面功能 一、安裝jumpserver 首先我們需要安裝並配置jumpserver。 $ wget -O /etc/yum.repos…

    編程 2025-04-29
  • Centos7配置靜態ip

    本文將詳細闡述如何在Centos7系統中配置靜態ip。 一、查看網路介面 在配置靜態ip之前,我們首先需要查看系統中的網路介面,以確定我們需要配置的網卡是哪一個。 ifconfig…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Hibernate註解聯合主鍵 如何使用

    解答:Hibernate的註解方式可以用來定義聯合主鍵,使用@Embeddable和@EmbeddedId註解。 一、@Embeddable和@EmbeddedId註解 在Hibe…

    編程 2025-04-29
  • 如何使用random生成不重複的隨機數

    在編程開發中,我們經常需要使用隨機數來模擬一些場景或生成一些數據。但是如果隨機數重複,就會造成數據的不準確性。這時我們就需要使用random庫來生成不重複且隨機的數值。下面將從幾個…

    編程 2025-04-29
  • 如何使用HTML修改layui內部樣式影響全局

    如果您想要使用layui來構建一個美觀的網站或應用,您可能需要使用一些自定義CSS來修改layui內部組件的樣式。然而,修改layui組件的樣式可能會對整個頁面產生影響,甚至可能破…

    編程 2025-04-29
  • 如何使用GPU加速運行Python程序——以CSDN為中心

    GPU的強大性能是眾所周知的。而隨著深度學習和機器學習的發展,越來越多的Python開發者將GPU應用於深度學習模型的訓練過程中,提高了模型訓練效率。在本文中,我們將介紹如何使用G…

    編程 2025-04-29
  • 理解agentmain方法如何使用

    如果你不清楚如何使用agentmain方法,那麼這篇文章將會為你提供全面的指導。 一、什麼是agentmain方法 在Java SE 5.0中,Java提供了一個機制,允許程序員在…

    編程 2025-04-29

發表回復

登錄後才能評論