标签:python ip self +. 地址 ipint1 iptoint split
python的IPy模块虽然可以实现一些ip地址的判断,但是不是很完美,有些场景根本判断不出来,还会抛出异常,比如一个地址范围和一个ip/掩码,这种不同类型就无法判断。
对此通过自己写函数来实现ip地址的判断,实现的思路很简单,先把ip地址转换为一个十进制的范围数,然后来判断是否有包含关系。
#下面函数可以将ip转换为十进制数
def iptoint(self,ip): try: h=[] s = ip.split('.') for temp in s: a=bin(int(temp))[2:] a=a.zfill(8) h.append(a) g=''.join(h) e=int(g,2) except: print('错误:不支持该ip的转换' + ip + '\n') traceback.print_exc(file=open('exception.log', 'a+')) # 输出异常信息到文件 return e
#下面函数可以将各种类型的地址进行处理后进行转换为十进制数
def get_ipint(self,ip): try: if re.fullmatch('\d+.\d+.\d+.\d+',ip): ipint1=self.iptoint(self,ip) ipint2=self.iptoint(self,ip) elif re.fullmatch('\d+.\d+.\d+.\d+-\d+.\d+.\d+.\d+',ip): ipint1=self.iptoint(self,ip.split('-')[0]) ipint2=self.iptoint(self,ip.split('-')[1]) elif re.fullmatch('\d+.\d+.\d+.\d+/32',ip): ipint1 = self.iptoint(self, ip.split('/')[0]) ipint2 = ipint1 elif re.fullmatch('\d+.\d+.\d+.\d+/\d+',ip): ipint1 = self.iptoint(self, ip.split('/')[0]) ipint2 = ipint1+int(math.pow(2,32-int(ip.split('/')[1])))-1 elif re.fullmatch('\d+.\d+.\d+.\d+/\d+.\d+.\d+.\d+',ip): ipint1 = self.iptoint(self, ip.split('/')[0]) ipint2 = ipint1+int(math.pow(2,32-int(self.exchange_mask(ip.split('/')[1]))))-1 else: ipint1=0 ipint2=0 return ipint1,ipint2 except: traceback.print_exc(file=open('exception.log','a+'))#输出异常信息到文件 print('错误:ip转换失败' + ip + '\n')
#下面的函数可以对十进制数进行包含关系判断
def ip_compare(self,ipa,ipb): try: ipa1,ipa2=self.get_ipint(ipa) ipb1,ipb2 = self.get_ipint(ipb) if ipa1<=ipb1<=ipa2 or ipa1<=ipb2<=ipa2 or ipb1<=ipa1<=ipb2 or ipb1<=ipa2<=ipb2: isinclude=True else: isinclude = False return isinclude except: self.m_textCtrl3.AppendText('错误:ip对比失败' + ipa+'-'+ipb + '\n') traceback.print_exc(file=open('exception.log', 'a+')) # 输出异常信息到文件
通过上面的几个方法可以完美的解决各种类型的ip地址包含关系判断。
标签:python,ip,self,+.,地址,ipint1,iptoint,split 来源: https://www.cnblogs.com/jazhu/p/12271152.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。