package util import ( "net" "regexp" ) // Matches: // - IPv4: 192.168.1.1 // - IPv4 + Port: 192.168.1.1:2020 // - IPv6 + Port: [fe80::551f:5aff:49cf:13e4]:2020 // - IPv6: fe80::551f:5aff:49cf:13e4 // // Return Order: []string{matched, IPv4, IPv6 (port notation), IPv6 (raw notation), Port var ipRegexp = regexp.MustCompile(`(?:((?:\d+\.){3}\d+)|\[([^\]]+)\]|([0-9a-f:]+))(?::(\d+))?`) func ParseIP(s string) net.IP { ips := ipRegexp.FindStringSubmatch(s) if ips == nil { return nil } if ips[1] != "" { return net.ParseIP(ips[1]) } else if ips[2] != "" { return net.ParseIP(ips[2]) } else if ips[3] != "" { return net.ParseIP(ips[3]) } else { return nil } }