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
DDDoriginal
2024-11-11 15:20:03876parcourir

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
}

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!

Déclaration:
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