[精讚] [會員登入]
3166

[PHP] 檢查IP是否在某個網段內 mtachcidr

要檢查IP是否在某個網段內,要寫幾行?10行?5行? 不用,只要2行。以下是我寫的 code /** * matchCI

分享此文連結 //n.sfs.tw/10170

分享連結 [PHP] 檢查IP是否在某個網段內 mtachcidr@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 13:16:47 最後編修
2016-11-05 11:20:04 By 張○○
 

自動目錄

要檢查IP是否在某個網段內,要寫幾行?10行?5行?不用,只要2行。

函式

/**
* matchCIDR() - 判斷兩個地址是否在某個子網内
* @param $addr 地址IP ex.. 1.2.3.4
* @param $cidr 網段範圍 ex .. 1.2.3.5/24
* @return 同網段回傳 1 否則回傳 null
*/
public function matchCIDR($addr, $cidr) {
     list($ip, $mask) = explode('/', $cidr);
     return (ip2long($addr) >> (32 - $mask) == ip2long($ip) >> (32 - $mask));
}

用法

$schcidr="163.17.40.0/24";
$ip=$_SERVER["REMOTE_ADDR"];

if( matchCIDR($ip, $schcidr) )
  //  in this net, do something...
else
  //  get out of here....

 

運算法是大家少知道的推移(shift)運算法,他的效能是乘法的10倍+,所以並不會為了精簡而輸了效能。

美中不足的,就是如果是 ipv6 的使用者,會遇到麻煩,請參考下面的連結。

 

相關連結

[PHP] IPv6檢查IP是否在某個網段內 mtachcidr6


原文 2009-11-08 20:03:51 程式於2007

END

你可能感興趣的文章

[PHP] 將字串的部分加上遮罩的函式 有些資料會想要隱藏部分的字元,例如身分證號或信用卡號、電話等。我寫了一個函式來完成這個功能。

[PHP] 處理mail 函式的標題中文字亂碼 PHP的mail函式若標題有中文字得先處理過,否則收信者會看到亂碼

[PHP] 使用browscap檢查瀏覽器版本 使用PHP內建函數browscap檢查瀏覽器版本

[PHP] 位元運算 (Bitwise operation)及和PERL比較 PHP 的位元運算,及和PERL比較整理

[PHP] IPv6檢查IP是否在某個網段內 mtachcidr6 要檢查IPv6是否在某個IPv6的網段內?

[PHP] 讀取作業系統程式執行結果 PHP讀取作業系統程式執行結果

隨機好文

[jQuery] 利用load()來達成ajax的寫法 jQuery中利用load()來達成ajax的寫法,也有人稱他是假的ajax,作法就是..

沒有非誰做不可的事,也沒有不可被取代的人 沒有非誰做不可的事,也沒有不可被取代的人

[Freebsd] 定時測試 ADSL 是否斷線並重連 中華電信 ADSL 雖有固定 ip,可是他卻會不定時「斷線」, 使用以下的 方法可以定時測試是否斷線,以及重新撥接。

安裝SPHINX支援中文 新版本的 sphinx 和舊版不同,網路上很多範例和教學是不能用的。此文是安裝和設定方法分享

詭異的創業思維 創業的思維中,有多少銀彈,有多少技術,有多少人脈,有多少時間等等,每個都要考慮進去,以熱忱建立的關係脆弱的像蘇打餅乾一樣..