Effiziente Überprüfung von IP-Adressen innerhalb eines Bereichs in Go
Die Feststellung, ob eine IP-Adresse in einen bestimmten Bereich fällt, ist eine häufige Anforderung in verschiedenen Netzwerken Operationen. In Go gibt es mehrere Ansätze, um diese Aufgabe zu lösen.
Schnellste Methode: bytes.Compare
Eine der effizientesten Methoden ist die Verwendung der bytes.Compare-Funktion um die Byte-Darstellung der IP-Adressen zu vergleichen.
import ( "bytes" "net" ) // Check if an IP address is within a range func check(trial, start, end net.IP) bool { if start.To4() == nil || end.To4() == nil || trial.To4() == nil { return false } return bytes.Compare(trial, start) >= 0 && bytes.Compare(trial, end) <= 0 }
Bei diesem Ansatz prüfen wir zunächst, ob die angegebenen IP-Adressen gültige IPv4-Adressen sind. Anschließend verwenden wir bytes.Compare, um die Byte-Darstellungen der Test-IP und die Start- und Endpunkte des Bereichs zu vergleichen. Wenn der Vergleich für beide Prüfungen einen nicht negativen Wert ergibt, bedeutet dies, dass die IP-Adresse innerhalb des Bereichs liegt.
Beispielverwendung
Der folgende Code demonstriert dies Verwendung der Bytes.Compare-Methode:
import ( "fmt" "net" ) var ( ip1 = net.ParseIP("216.14.49.184") ip2 = net.ParseIP("216.14.49.191") ) func main() { check := func(ip string) { trial := net.ParseIP(ip) res := check(trial, ip1, ip2) fmt.Printf("%v is %v within range %v to %v\n", trial, res, ip1, ip2) } check("1.2.3.4") check("216.14.49.185") check("216.14.49.191") }
Ausgabe:
1.2.3.4 is false within range 216.14.49.184 to 216.14.49.191 216.14.49.185 is true within range 216.14.49.184 to 216.14.49.191 216.14.49.191 is true within range 216.14.49.184 to 216.14.49.191
Das obige ist der detaillierte Inhalt vonWie kann man in Go effizient prüfen, ob eine IP-Adresse innerhalb eines Bereichs liegt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!