IP与CIDR校验逻辑-go

原创
2021/10/14 20:00
阅读数 1.4K
如何检测给定的ip是否属于某个域内的地址,校验ip合法性。(网络资源虽多,但很少有这么简单的吧)
如:
ipstr netstr
192.168.1.30 192.168.1.0/24
x.x.x.x y.y.y.y/z
x,y: 0~255
z: 0~32

核心逻辑如下

// 可参考扩展至ipv6
func ipcheck(ipstr , netstr string) bool {
	ipaddr := net.ParseIP(ipstr)
	_, ipnet, err := net.ParseCIDR(netstr)
	if err != nil {
		log.Println(err)
		return false
	}
	return ipnet.IP.Equal(ipaddr.Mask(ipnet.Mask))
}

稍微严格点

func ipcheck(ipstr , netstr string) (ok bool, err error) {
	ipaddr := net.ParseIP(ipstr)
	_, ipnet, err := net.ParseCIDR(netstr)
	if err != nil {
		return
	}
	ok = ipnet.IP.Equal(ipaddr.Mask(ipnet.Mask))
}
展开阅读全文
go
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部