Package iprange parses IPv4/IPv6 addresses from strings in IP range format.
172.18.0.1/fd00::1172.18.0.0/24/fd00::/64172.18.0.1-10/fd00::1-a172.18.0.1-172.18.1.10/fd00::1-fd00::1:a
package main
import (
"fmt"
"log"
"github.com/iiiceoo/iprange"
)
func main() {
// Parse IP ranges.
ranges, err := iprange.Parse(
"172.18.0.1",
"172.18.0.0/24",
"172.18.0.1-10",
"172.18.1.1-172.18.1.3",
)
if err != nil {
log.Fatalf("failed to parse IP ranges: %v\n", err)
}
fmt.Printf("%s IP ranges: %s\n", ranges.Version(), ranges)
// Merge IP ranges.
merged := ranges.Merge()
fmt.Printf("Merged IP ranges: %s\n", merged)
// Interval mathematics of IP ranges.
another, _ := iprange.Parse("172.18.0.0/24")
diff := merged.Diff(another)
fmt.Printf("The difference between two IP ranges: %s\n", diff)
// Convert IP ranges to IP addresses.
fmt.Printf("Iterate through all %d IP addresses:\n", diff.Size())
ipIter := diff.IPIterator()
for {
ip := ipIter.Next()
if ip == nil {
break
}
fmt.Println(ip)
}
}Package iprange is MIT-Licensed.