2017-09-05 24 views
1

Existe-t-il quelque chose de similaire à 'npm masque réseau' dans golang? Je dois convertir, par exemple, 10.0.0.0/ en 10.0.0.0/ 255.0.0.0 donc, en gros, créer un masque de réseau au format CIDR à un point décimal.golang notation de préfixe CIDR à adresse IP/masque de sous-réseau (point-décimal)

var Netmask = require('netmask').Netmask 
var block = new Netmask('10.0.0.0/8'); 
block.mask; // 255.0.0.0 

Je ne peux pas le trouver dans /golang.org/src/net/ip.go

Répondre

3

La bibliothèque standard aller ne dispose pas d'une fonction pour créer cette représentation. Cela étant dit, il est difficile de ne pas vous faire:

https://play.golang.org/p/XT_UXoy6ra

func main() { 
    _, ipv4Net, err := net.ParseCIDR("10.0.0.0/8") 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Println(ipv4MaskString(ipv4Net.Mask)) 
} 

func ipv4MaskString(m []byte) string { 
    if len(m) != 4 { 
     panic("ipv4Mask: len must be 4 bytes") 
    } 

    return fmt.Sprintf("%d.%d.%d.%d", m[0], m[1], m[2], m[3]) 
} 

Gardez à l'esprit ce format ne fonctionne que pour les masques ipv4. Si vous deviez passer un masque ipv6, cela paniquerait.