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 &= $mask; // Ensure subnet is aligned return ($ip & $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!