登录
原创

基于GO实现判断一个IP是否在许可白名单内

发布于 2024-01-24 阅读 4503
  • 后端
  • Go
原创

使用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
}

评论区

DDwyane
20粉丝

我饿了,要睡觉了~

0

0

0

举报