Maison >développement back-end >Golang >Mastering Prefix (CIDR) Opérations en net / netip

Mastering Prefix (CIDR) Opérations en net / netip

DDD
DDDoriginal
2025-01-25 00:05:09452parcourir

Mastering Prefix (CIDR) Operations in net/netip

Cet article plonge dans le type net/netip du package Prefix, un outil puissant pour représenter les réseaux IP en notation CIDR. Nous explorerons ses fonctionnalités, en nous concentrant sur les applications pratiques et les meilleures pratiques.

compréhension Prefix

Le type Prefix simplifie le travail avec les plages d'adresses IP à l'aide de la notation CIDR. Les exemples incluent:

  • 192.168.1.0/24: représente 256 adresses IPv4 (192.168.1.0 à 192.168.1.255).
  • 2001:db8::/32: représente un grand réseau IPv6.

Création et analyse des préfixes

Création et analyse de préfixe de base:

<code class="language-go">package main

import (
    "fmt"
    "net/netip"
)

func main() {
    // Parse from CIDR string
    prefix, err := netip.ParsePrefix("192.168.1.0/24")
    if err != nil {
        panic(err)
    }

    // Create from Addr and bits
    addr := netip.MustParseAddr("192.168.1.0")
    prefix2 := netip.PrefixFrom(addr, 24)

    fmt.Printf("From string: %v\nFrom components: %v\n", prefix, prefix2)
}</code>

Les règles de validation des clés s'appliquent:

  • Nombre de bits valide (0-32 pour IPv4, 0-128 pour IPv6).
  • partie hôte à zéro de l'adresse.
  • Adresse valide.

Exploration Prefix Méthodes

Examinons les méthodes essentielles Prefix.

Propriétés de base:

<code class="language-go">func explorePrefix(p netip.Prefix) {
    // Get the network address
    addr := p.Addr()
    fmt.Printf("Network address: %v\n", addr)

    // Get the prefix length (bits)
    bits := p.Bits()
    fmt.Printf("Prefix length: %d\n", bits)

    // Check if it's IPv4 or IPv6
    fmt.Printf("Is IPv4: %v\n", p.Addr().Is4())
    fmt.Printf("Is IPv6: %v\n", p.Addr().Is6())

    // Check if it represents a single IP
    fmt.Printf("Is single IP: %v\n", p.IsSingleIP())
}</code>

Opérations réseau: Les vérifications de confinement et de chevauchement sont cruciales:

<code class="language-go">func networkOperations() {
    network := netip.MustParsePrefix("192.168.1.0/24")

    // Check if an IP is in the network
    ip := netip.MustParseAddr("192.168.1.100")
    fmt.Printf("Contains IP? %v\n", network.Contains(ip))

    // Check if a smaller network is contained
    subnet := netip.MustParsePrefix("192.168.1.0/25")
    fmt.Printf("Contains subnet? %v\n", network.Contains(subnet.Addr()))

    // Check if networks overlap
    other := netip.MustParsePrefix("192.168.1.128/25")
    fmt.Printf("Overlaps? %v\n", network.Overlaps(other))
}</code>

Applications du monde réel

Voyons Prefix en action.

1. Système de gestion d'adresses IP (IPAM):

<code class="language-go">// ... (IPAM struct and methods omitted for brevity, refer to original article) ...</code>

2. Calculatrice de sous-réseau:

<code class="language-go">// ... (SubnetInfo struct and AnalyzeSubnet function omitted for brevity, refer to original article) ...</code>

3. Gestionnaire de règles du pare-feu:

<code class="language-go">// ... (Action, Rule, Firewall structs and methods omitted for brevity, refer to original article) ...</code>

Opérations avancées: La division de sous-réseau et l'agrégation de réseau sont couvertes dans l'article d'origine.

meilleures pratiques

  • Validation d'entrée: Valider toujours l'entrée CIDR pour éviter les erreurs.
  • Gestion IPv4 / IPv6: Gérer correctement les deux familles d'adresses.
  • Contains() Pour l'adhésion: Utilisez la méthode Contains() pour les vérifications efficaces de l'appartenance à l'adhésion du réseau.

Le type net/netip du package Prefix simplifie considérablement les opérations de réseau complexes. En comprenant ses capacités et en suivant les meilleures pratiques, vous pouvez créer des applications liées au réseau robustes et efficaces.

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