[精讚] [會員登入]
1774

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

要檢查IPv6是否在某個IPv6的網段內?

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

分享連結 [PHP] IPv6檢查IP是否在某個網段內 mtachcidr6@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-24 09:56:46 最後編修
2018-10-12 01:50:25 By 張○○
 

自動目錄

由於 IPv4 可以轉成十進位用推移的運算,但是 IPv6 要轉成十進位的話,會超過有效位數的顯示,另外由於ipv6本身是用十六進位表示,沒必要換成10進位。所以要用更漂亮的作法。我把他寫成 class  = =!!:

函式

/**
*   ipv6 class by axer@ms1.boe.tcc.edu.tw
*/
class ipv6{
    /**
    *   ExpandIPv6Notation2Bin()-  Convert an ipv6 address to bin string
    *   @param string $ip6 - an ipv6 address
    *   @return return the binary string of an ipv6 address if parameter ip6 is an ipv6 address,
    *           else it return an empty string.
    */
    public function ExpandIPv6Notation2Bin($ip6) {
        if (strpos($ip6, '::') !== false)
            $ip6 = str_replace('::', str_repeat(':0', 8 - substr_count($ip6, ':')).':', $ip6);
        $ip6parts = explode(':', $ip6);
        $res="";
        foreach ($ip6parts as $part)
            $res .= str_pad(base_convert( $part, 16, 2), 16, 0, STR_PAD_LEFT);
        return $res;
    }

    /**
    *   MatchCIDR6 -- Check if an ipv6 address is in the CDIR6 subnet.
    *   @param string $cidr6 - an ipv6 subnet, ex 2001:288:5400/39 or 2001:288:5432:/64 or 2001:288:5478::/64..
    *   @param string $chkipv6 - an ipv6 address, ex ::1, 2001:288:5200::1, :: ,etc.
    *   @return return true if $chkipv6 is inside the $cidr6 subnet, or return false.
    */
    public function MatchCIDR6( $cidr6, $chkipv6)
    {
        list($ip6, $prefixlen) = explode('/', $cidr6);
        $cidrbin= substr( $this->ExpandIPv6Notation2Bin($ip6), 0, $prefixlen);
        $chkip6bin= substr( $this->ExpandIPv6Notation2Bin($chkipv6), 0, $prefixlen);
        if(! strcmp($cidrbin,$chkip6bin))return true;
        return false;
    }
}

用法

$cidr6 = "2001:288:5400/39";
$ip6= "2001:288:5300:000::72A:4BE7";
$o_ipv6 = new ipv6();
// 檢查是ip6 是否在網段內
if( $o_ipv6->MatchCIDR6($cidr6,$ip6))
    print "Inside";
else
    print "Outside";

 

備註:有參考別人的程式,不過來源佚失了

 

相關連結

[PERL] 檢查IP是否在某個網段內:matchcidr


原文 2009-11-26

END

你可能感興趣的文章

[phpmyadmin] 缺少 mcrypt 外掛,請檢查 PHP 設定 缺少 mcrypt 外掛,請檢查 PHP 設定,安裝php-mcrypt。

作業上傳程式 提供學生作業上傳的程式

[CodeIgniter 3] COOKIE的使用 PHP CodeIgniter 3 中COOKIE的使用超簡單

[PHP] 移除陣列或字串中的重覆元素 移除陣列或字串中的重覆元素

[PHP] UTF8中取出字串中特定的字數 要將字串,例如資料庫取出的TEXT,取出特定的字數

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

隨機好文

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

[Win7] 燒錄 iso 檔 在Windows7 中內建燒錄程式,可以直接把檔案拉到光碟機裡,再執行燒錄。

維修冰箱 維修冰箱

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..

APACHE的記錄檔格式 LogFormat 語法 在APACHE中有定義一些記錄的語法模版 在 /etc/httpd/conf/httpd.conf 中: LogForm