Maison >développement back-end >Golang >Comment vérifier efficacement si une adresse IP est dans une plage dans Go ?
Vérifier efficacement les adresses IP dans une plage dans Go
Déterminer si une adresse IP se situe dans une plage spécifiée est une exigence courante dans divers réseaux opérations. Dans Go, il existe plusieurs approches pour résoudre cette tâche.
Méthode la plus rapide : bytes.Compare
L'une des méthodes les plus efficaces consiste à utiliser la fonction bytes.Compare pour comparer la représentation en octets des adresses IP.
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 }
Dans cette approche, nous vérifions d'abord si les adresses IP données sont des adresses IPv4 valides. Nous utilisons ensuite bytes.Compare pour comparer les représentations en octets de l'adresse IP d'essai et les points de début et de fin de la plage. Si la comparaison aboutit à une valeur non négative pour les deux vérifications, cela signifie que l'adresse IP est dans la plage.
Exemple d'utilisation
Le code suivant démontre le utilisation de la méthode bytes.Compare :
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") }
Sortie :
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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!