Go library for handling IP addresses and subnets, both IPv4 and IPv6
IP address and network manipulation, CIDR, address and subnet operations, iterations, containment checks, IP to CIDR block lookup, longest prefix match, subnetting, spanning, merging, ranges, and address tries, with polymorphic code
Version | Notes |
---|---|
1.2.1 | Requires Go 1.12 or higher |
1.4.1 | Requires Go 1.13 or higher |
1.7.0 | Requires Go 1.18 or higher |
In your go.mod file:
require github.com/seancfoley/ipaddress-go v1.7.0
In your source file:
import "github.com/seancfoley/ipaddress-go/ipaddr"
Packaged as a Linux Fedora rpm and as a Linux Debian, available from Ubuntu
Also available as a Java library from the IPAddress repository
starting with address or subnet strings
import "github.com/seancfoley/ipaddress-go/ipaddr"
ipv6AddrStr := ipaddr.NewIPAddressString("a:b:c:d::a:b/64")
if ipAddr, err := ipv6AddrStr.ToAddress(); err != nil {
// err.Error() has validation error
} else {
// use the address
}
...or avoid errors, checking for nil:
str := ipaddr.NewIPAddressString("a:b:c:d:e-f:f:1.2-3.3.4/64")
addr := str.GetAddress()
if addr != nil {
// use address
}
starting with host name strings
hostStr := "[::1]"
host := ipaddr.NewHostName(hostStr)
err := host.Validate()
if err == nil {
if host.IsAddress() {
fmt.Println("address: " + host.AsAddress().String())
} else {
fmt.Println("host name: " + host.String())
}
// use host
} else {
fmt.Println(err.Error())
}