Maison > développement back-end > Golang > Comment vérifier efficacement si une adresse IP est dans une plage dans Go ?

Comment vérifier efficacement si une adresse IP est dans une plage dans Go ?

DDD
Libérer: 2024-11-11 15:20:03
original
883 Les gens l'ont consulté

How to Efficiently Check if an IP Address is Within a Range in 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
}
Copier après la connexion

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")
}
Copier après la connexion

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
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal