41 lines
617 B
Go
41 lines
617 B
Go
|
package netutil
|
||
|
|
||
|
import "net"
|
||
|
|
||
|
var privateNets []*net.IPNet
|
||
|
|
||
|
func init() {
|
||
|
for _, cidr := range []string{
|
||
|
"127.0.0.0/8",
|
||
|
"10.0.0.0/8",
|
||
|
"172.16.0.0/12",
|
||
|
"192.168.0.0/16",
|
||
|
"::1/128",
|
||
|
"fe80::/10",
|
||
|
"fc00::/7",
|
||
|
} {
|
||
|
_, network, _ := net.ParseCIDR(cidr)
|
||
|
privateNets = append(privateNets, network)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func IsPrivate(host string) bool {
|
||
|
if host == "localhost" {
|
||
|
return true
|
||
|
}
|
||
|
return IsPrivateIP(net.ParseIP(host))
|
||
|
}
|
||
|
|
||
|
func IsPrivateIP(ip net.IP) bool {
|
||
|
if ip == nil {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
for _, privateNet := range privateNets {
|
||
|
if privateNet.Contains(ip) {
|
||
|
return true
|
||
|
}
|
||
|
}
|
||
|
return false
|
||
|
}
|