pkg/ip/parse_ip_net.go
package ip
import (
"net"
"strings"
)
func ParseIPNet(s string) *net.IPNet {
if !strings.ContainsRune(s, '/') {
ip := net.ParseIP(s)
if ip == nil {
return nil
}
var mask net.IPMask
switch {
case ip.To4() != nil:
mask = net.CIDRMask(32, 32)
case ip.To16() != nil:
mask = net.CIDRMask(128, 128)
default:
return nil
}
return &net.IPNet{
IP: ip,
Mask: mask,
}
}
switch ip, ipNet, err := net.ParseCIDR(s); {
case err != nil:
return nil
case !ipNet.IP.Equal(ip):
return nil
default:
return ipNet
}
}