Rumah > pembangunan bahagian belakang > tutorial php > 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
Lepaskan: 2024-10-18 19:33:29
asal
314 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Output:

10.2.1.100 is in the 10.2 subnet
10.2.1.101 is in the 10.2 subnet
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan