ip.go 478 B

12345678910111213141516171819202122
  1. package common
  2. import "net"
  3. func IsPrivateIP(ip net.IP) bool {
  4. if ip.IsLoopback() || ip.IsLinkLocalUnicast() || ip.IsLinkLocalMulticast() {
  5. return true
  6. }
  7. private := []net.IPNet{
  8. {IP: net.IPv4(10, 0, 0, 0), Mask: net.CIDRMask(8, 32)},
  9. {IP: net.IPv4(172, 16, 0, 0), Mask: net.CIDRMask(12, 32)},
  10. {IP: net.IPv4(192, 168, 0, 0), Mask: net.CIDRMask(16, 32)},
  11. }
  12. for _, privateNet := range private {
  13. if privateNet.Contains(ip) {
  14. return true
  15. }
  16. }
  17. return false
  18. }