Go语言实现IP段范围校验示例
背景
近期做了一个需求,是检测某个IP是否在若干IP段内,做固定地点IP筛查,满足特定业务需求。
解决方案
PLANA点分十进制范围区分
简单来讲,就是将IPv4原有的四段,分别对比IP地址,查看每一段是否在IP段范围内,可以用于段控制在每一个特定段0~255内筛选,例如:
192.123.1.0~192.123.156.255
这样的比较规范的特定段可以实现简单的筛选,但是问题来了,不规则的连续IP段怎么排除?如下:
IP段:192.168.1.0~192.172.3.255
IP:192.160.0.255
这样就会出现问题,可以看到按照简单的分段对比,很明显校验不通过,但是这个IP还是存在在IP段中,方案只能针对统一分段下规则的IP段才可以区分。
PLANB转整型对别
IP地址可以转换为整数,可以将IP范围化整为整数范围进行排查。
这种方式只需要将授为范围内的地址转换为整数,就可以将IP排查在外了。
代码
以下是示例代码:
packagemain
import(
"fmt"
"strconv"
"strings"
)
funcmain(){
ipVerifyList:="192.168.1.0-192.172.3.255"
ip:="192.170.223.1"
ipSlice:=strings.Split(ipVerifyList,`-`)
iflen(ipSlice)<0{
return
}
ifip2Int(ip)>=ip2Int(ipSlice[0])&&ip2Int(ip)<=ip2Int(ipSlice[1]){
fmt.Println("ipiniplist")
return
}
fmt.Println("ipnotiniplist")
}
funcip2Int(ipstring)int64{
iflen(ip)==0{
return0
}
bits:=strings.Split(ip,".")
iflen(bits)<4{
return0
}
b0:=string2Int(bits[0])
b1:=string2Int(bits[1])
b2:=string2Int(bits[2])
b3:=string2Int(bits[3])
varsumint64
sum+=int64(b0)<<24
sum+=int64(b1)<<16
sum+=int64(b2)<<8
sum+=int64(b3)
returnsum
}
funcstring2Int(instring)(outint){
out,_=strconv.Atoi(in)
return
}
到此这篇关于Go语言实现IP段范围校验示例的文章就介绍到这了,更多相关GoIP段范围校验内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!