...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package netutils
15
16 import (
17 "net"
18 "strings"
19 )
20
21
22 func IPToCidr(ip string) string {
23
24 return ip + "/32"
25 }
26
27
28 func ResolveCidrs(names []string) ([]string, error) {
29 cidrs := []string{}
30 for _, target := range names {
31
32 cidr, err := ResolveCidr(target)
33 if err != nil {
34 return nil, err
35 }
36
37 cidrs = append(cidrs, cidr...)
38 }
39
40 return cidrs, nil
41 }
42
43
44 func ResolveCidr(name string) ([]string, error) {
45 _, ipnet, err := net.ParseCIDR(name)
46 if err == nil {
47 return []string{ipnet.String()}, nil
48 }
49
50 if net.ParseIP(name) != nil {
51 return []string{IPToCidr(name)}, nil
52 }
53
54 addrs, err := net.LookupIP(name)
55 if err != nil {
56 return nil, err
57 }
58
59 cidrs := []string{}
60 for _, addr := range addrs {
61 addr := addr.String()
62
63
64 if strings.Contains(addr, ".") {
65 cidrs = append(cidrs, IPToCidr(addr))
66 }
67 }
68 return cidrs, nil
69 }
70