ip.go 841 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package network
  2. import (
  3. "fmt"
  4. "net"
  5. )
  6. func IsValidSubnet(subnet string) error {
  7. _, _, err := net.ParseCIDR(subnet)
  8. if err != nil {
  9. return fmt.Errorf("failed to parse subnet: %w", err)
  10. }
  11. return nil
  12. }
  13. func IsIPInSubnet(ip, subnet string) (bool, error) {
  14. _, ipNet, err := net.ParseCIDR(subnet)
  15. if err != nil {
  16. return false, fmt.Errorf("failed to parse subnet: %w", err)
  17. }
  18. return ipNet.Contains(net.ParseIP(ip)), nil
  19. }
  20. func IsValidSubnets(subnets []string) error {
  21. for _, subnet := range subnets {
  22. if err := IsValidSubnet(subnet); err != nil {
  23. return err
  24. }
  25. }
  26. return nil
  27. }
  28. func IsIPInSubnets(ip string, subnets []string) (bool, error) {
  29. for _, subnet := range subnets {
  30. if ok, err := IsIPInSubnet(ip, subnet); err != nil {
  31. return false, err
  32. } else if ok {
  33. return true, nil
  34. }
  35. }
  36. return false, nil
  37. }