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

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

DDD
Libérer: 2025-01-25 00:05:09
original
383 Les gens l'ont consulté

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

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

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

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

2. Calculatrice de sous-réseau:

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

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

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!

source:php.cn
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