Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Menentukan sama ada Alamat IP Kepunyaan Subnet CIDR dengan Cekap?

Bagaimana untuk Menentukan sama ada Alamat IP Kepunyaan Subnet CIDR dengan Cekap?

Susan Sarandon
Susan Sarandonasal
2024-10-18 19:27:29586semak imbas

How to Determine if an IP Address Belongs to a CIDR Subnet Efficiently?

Menentukan Kemasukan Subnet CIDR Alamat IP

Dalam banyak aplikasi rangkaian, timbul keperluan untuk mengesahkan sama ada alamat IP tergolong dalam subnet CIDR yang diberikan. Soalan ini meneroka kaedah yang cepat dan cekap untuk perbandingan sedemikian.

Untuk mencapai ini, fungsi, cidr_match(), digunakan. Ia menerima dua parameter: alamat IP dalam format kuad bertitik dan topeng notasi CIDR.

Pelaksanaan

Langkah pertama melibatkan penukaran alamat IP dan subnet kepada integer panjang menggunakan ip2long( ). Subnet CIDR kemudiannya dihuraikan untuk menentukan subnet mask berdasarkan bilangan bit yang ditentukan.

Seterusnya, operasi AND bitwise dilakukan antara alamat IP dan subnet mask. Jika hasilnya sepadan dengan subnet, ini menunjukkan bahawa alamat IP berada dalam subnet yang ditentukan.

Berikut ialah coretan kod untuk fungsi cidr_match():

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; # nb: in case the supplied subnet wasn't correctly aligned
    return ($ip &amp; $mask) == $subnet;
}

Dengan menggunakan fungsi ini, anda boleh menentukan dengan cekap sama ada alamat IP kepunyaan subnet CIDR tertentu. Kesederhanaan dan kecekapan pendekatan ini menjadikannya sesuai untuk pelbagai aplikasi berkaitan rangkaian.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan sama ada Alamat IP Kepunyaan Subnet CIDR dengan Cekap?. 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