Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann mithilfe integrierter Funktionen festgestellt werden, ob sich eine IP-Adresse innerhalb eines CIDR-Subnetzes befindet?

Wie kann mithilfe integrierter Funktionen festgestellt werden, ob sich eine IP-Adresse innerhalb eines CIDR-Subnetzes befindet?

Susan Sarandon
Susan SarandonOriginal
2024-10-18 19:33:29241Durchsuche

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

Zuordnung von IP-Adressen zu CIDR-Subnetzen

Die Feststellung, ob eine IP-Adresse in ein bestimmtes CIDR-Subnetz fällt, ist eine häufige Aufgabe in der Netzwerkadministration. Es ermöglicht eine effiziente Zuordnung und Verwaltung von IP-Bereichen.

Um diesem Bedarf gerecht zu werden, untersuchen wir die Implementierung einer Funktion, cidr_match(), die diesen Abgleich nur unter Verwendung integrierter oder allgemeiner Funktionen durchführt.

Implementierungsübersicht

Der Algorithmus beinhaltet die Konvertierung der IP-Adresse und des Subnetzbereichs in lange Ganzzahlen mithilfe der Funktion ip2long(). Als nächstes wird die Subnetzmaske erhalten, indem die nachgestellten Ziffern des Subnetzbereichs (z. B. „/16“) in eine bitweise Maske umgewandelt werden. Diese Maske teilt die IP-Adresse effektiv in ein Netzwerkpräfix und ein Hostsuffix auf.

Schließlich führen wir eine bitweise UND-Verknüpfung zwischen der IP-Adresse und der Subnetzmaske durch. Wenn das Ergebnis mit dem Subnetzbereich übereinstimmt, liegt die IP-Adresse innerhalb des angegebenen CIDR-Subnetzes.

Funktionsdefinition

Hier ist die Implementierung der Funktion 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>

Beispielverwendung

Im bereitgestellten Beispiel gehen wir davon aus, dass wir ein Array von IP-Adressen überprüfen müssen:

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

Wir Ich möchte überprüfen, welche dieser IPs zum Subnetz „10.2.0.0/16“ gehören:

<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>

Ausgabe:

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

Dies zeigt die Verwendung der Funktion cidr_match() Bestimmen Sie, ob eine IP-Adresse in ein bestimmtes CIDR-Subnetz fällt.

Das obige ist der detaillierte Inhalt vonWie kann mithilfe integrierter Funktionen festgestellt werden, ob sich eine IP-Adresse innerhalb eines CIDR-Subnetzes befindet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn