使用Go编写的简单代码片段,用于判断一个IP是否在许可白名单内,IP白名单清单支持独立ip、ip段。此代码仅支持IPv4的简单实现
package main
import (
"fmt"
"net"
"strings"
)
// 使用Go编写的简单代码片段,用于判断一个IP是否在许可白名单内,IP白名单清单支持独立ip、ip段。此代码仅支持IPv4的简单实现
func main() {
// 定义许可白名单
whitelist := []string{"192.168.1.1", "10.0.0.0/24"}
// 需要验证的IP
// ip := "192.168.1.1"
ip := "10.0.1.1"
// 判断IP是否在白名单内
if isIPInWhitelist(ip, whitelist) {
fmt.Printf("%s 在白名单内\n", ip)
} else {
fmt.Printf("%s 不在白名单内\n", ip)
}
}
func isIPInWhitelist(ip string, whitelist []string) bool {
// 将IP转换为net.IP类型
ipAddr := net.ParseIP(ip)
if ipAddr == nil {
return false
}
// 遍历白名单,判断IP是否在其中
for _, allowedIP := range whitelist {
if strings.Contains(allowedIP, "/") {
// 如果是IP段
_, ipNet, err := net.ParseCIDR(allowedIP)
if err != nil {
fmt.Println("IP段格式错误:", allowedIP)
continue
}
if ipNet.Contains(ipAddr) {
return true
}
} else {
// 如果是单个IP
allowedIP = strings.TrimSpace(allowedIP)
if allowedIP == ip {
return true
}
}
}
return false
}