Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menentukan Jika Alamat IP berada dalam Subnet CIDR Menggunakan Fungsi Terbina dalam?

Bagaimana untuk Menentukan Jika Alamat IP berada dalam Subnet CIDR Menggunakan Fungsi Terbina dalam?

Susan Sarandon
Susan Sarandonasal
2024-10-18 19:33:29241semak imbas

How to Determine If an IP Address is Within a CIDR Subnet Using Built-in Functions?

Memadankan Alamat IP dengan Subnet CIDR

Menentukan sama ada alamat IP berada dalam subnet CIDR tertentu ialah tugas biasa dalam pentadbiran rangkaian. Ia membolehkan pemetaan dan pengurusan julat IP yang cekap.

Untuk menangani keperluan ini, mari kita terokai pelaksanaan fungsi, cidr_match(), yang melaksanakan pemadanan ini hanya menggunakan fungsi terbina dalam atau biasa.

Gambaran Keseluruhan Pelaksanaan

Algoritma melibatkan penukaran alamat IP dan julat subnet kepada integer panjang menggunakan fungsi ip2long(). Seterusnya, subnet mask diperoleh dengan menukar digit tertinggal julat subnet (cth., "/16") kepada topeng bitwise. Topeng ini dengan berkesan membahagikan alamat IP kepada awalan rangkaian dan akhiran hos.

Akhir sekali, kami melakukan operasi AND bitwise antara alamat IP dan subnet mask. Jika hasilnya sepadan dengan julat subnet, maka alamat IP berada dalam subnet CIDR yang ditentukan.

Definisi Fungsi

Berikut ialah pelaksanaan fungsi cidr_match():

<code class="php">function cidr_match($ip, $range)
{
    list ($subnet, $bits) = explode('/', $range);
    if ($bits === null) {
        $bits = 32;
    }
    $ip = ip2long($ip);
    $subnet = ip2long($subnet);
    $mask = -1 << (32 - $bits);
    $subnet &amp;= $mask; // Ensure subnet is aligned
    return ($ip &amp; $mask) == $subnet;
}</code>

Contoh Penggunaan

Dalam contoh yang disediakan, mari kita anggap kita mempunyai pelbagai alamat IP untuk diperiksa:

<code class="php">$ips = ['10.2.1.100', '10.2.1.101', '10.5.1.100', '1.2.3.4'];</code>

Kami ingin mengesahkan yang mana antara IP ini tergolong dalam subnet "10.2.0.0/16":

<code class="php">foreach ($ips as $IP) {
    if (cidr_match($IP, '10.2.0.0/16') == true) {
        print "{$IP} is in the 10.2 subnet\n";
    }
}</code>

Output:

10.2.1.100 is in the 10.2 subnet
10.2.1.101 is in the 10.2 subnet

Ini menunjukkan penggunaan fungsi cidr_match() untuk tentukan sama ada alamat IP berada dalam subnet CIDR yang ditentukan.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Jika Alamat IP berada dalam Subnet CIDR Menggunakan Fungsi Terbina dalam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn