Advertisement
yerden

prefixes merge utility

Feb 28th, 2024
963
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 0.83 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "flag"
  6.     "fmt"
  7.     "net/netip"
  8.     "os"
  9.  
  10.     "go4.org/netipx"
  11. )
  12.  
  13. var input = flag.String("f", "", "Specify input file")
  14.  
  15. func main() {
  16.     flag.Parse()
  17.  
  18.     var err error
  19.     f := os.Stdin
  20.     if *input != "" {
  21.         if f, err = os.Open(*input); err != nil {
  22.             panic(err)
  23.         }
  24.         defer f.Close()
  25.     }
  26.  
  27.     scanner := bufio.NewScanner(f)
  28.     scanner.Split(bufio.ScanLines)
  29.     builder := &netipx.IPSetBuilder{}
  30.  
  31.     for i := 0; scanner.Scan(); i++ {
  32.         str := scanner.Text()
  33.         prefix, err := netip.ParsePrefix(str)
  34.         if err != nil {
  35.             fmt.Printf("unable to parse line %d: %s", i, str)
  36.             return
  37.         }
  38.  
  39.         builder.AddPrefix(prefix)
  40.     }
  41.  
  42.     if err := scanner.Err(); err != nil {
  43.         panic(err)
  44.     }
  45.  
  46.     set, err := builder.IPSet()
  47.     if err != nil {
  48.         panic(err)
  49.     }
  50.  
  51.     for _, p := range set.Prefixes() {
  52.         fmt.Println(p)
  53.     }
  54. }
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement