pythonはipアドレスの含む関係判断を実現する

2730 ワード

pythonのIPyモジュールは、いくつかのipアドレスの判断を実現することができますが、完璧かどうかは、一部のシーンではまったく判断できず、アドレス範囲やip/マスクなどの異常を投げ出すこともあります.このような異なるタイプでは判断できません.
これに対して自分で関数を書くことでipアドレスの判断を実現するのは簡単で、まずipアドレスを10進数の範囲数に変換して、それから関係があるかどうかを判断します.

#       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 + '
') 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 + '
')   #   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 + '
') traceback.print_exc(file=open('exception.log', 'a+')) #

上記のいくつかの方法により、様々なタイプのipアドレスが関係判断を含むことを完璧に解決することができる.
まとめ
以上、編集者がご紹介したpythonがipアドレスの含む関係判断を実現するのに役立つことを願っています.