计算两个IP之间有多少个IP数,可以转化成int 相减呀。
IPy.IP(ip2).int() - IPy.IP(ip2).int() +1 就是ip2和ip1之间有多少个ip数量了。
最近在工作中需要对用户输入的ip进行重复性校验,之前处理的都是单ip,直接通过ip字符串比较即可。现在用户输入的是ip+掩码的方式,也就是支持ip范围输入,这样之前的校验方式就行不通了。
那么如何解决呢?我们都知道ip4是通过"点分十进制"来表示的,本质上就是一个二进制的整数,只需要将十进制的表示的IP转换为二进制整数,通过数值进行比较即可。
对于单ip而言,直接转换为整数,对于ip+掩码的形式(也就是ip范围)获取范围的开始值和结束值就可以确定其范围了。
这里介绍如下:
其中网路地址就是ip段的开始值,广播地址就是ip段的结束值.
喜欢点个赞!!!
你是要判断 两个 IP段 是否有重合吧?每个IP段的 开始/结束 IP 各自转成整形:
struct.unpack("!L", socket.inet_aton('192.168.1.152'))[0]
然后就是比较 两个整型段 是否有重合