如何检测给定的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))
}