Files
-Fonu/internal/validate/ip.go
T

39 lines
695 B
Go
Raw Normal View History

2026-09-23 09:40:59 +08:00
package validate
import (
"fmt"
"net"
"strings"
)
func IPOrCIDR(raw string) (string, error) {
raw = strings.TrimSpace(raw)
if raw == "" {
return "", fmt.Errorf("IP 或 CIDR 不能为空")
}
if strings.Contains(raw, "/") {
_, ipNet, err := net.ParseCIDR(raw)
if err != nil {
return "", fmt.Errorf("CIDR 格式无效")
}
return ipNet.String(), nil
}
ip := net.ParseIP(raw)
if ip == nil {
return "", fmt.Errorf("IP 格式无效")
}
if v4 := ip.To4(); v4 != nil {
return v4.String(), nil
}
return ip.String(), nil
}
func IPOrCIDRList(list []string) error {
for _, item := range list {
if _, err := IPOrCIDR(item); err != nil {
return err
}
}
return nil
}