pythonはipアドレスの含む関係判断を実現する
2730 ワード
pythonのIPyモジュールは、いくつかのipアドレスの判断を実現することができますが、完璧かどうかは、一部のシーンではまったく判断できず、アドレス範囲やip/マスクなどの異常を投げ出すこともあります.このような異なるタイプでは判断できません.
これに対して自分で関数を書くことでipアドレスの判断を実現するのは簡単で、まずipアドレスを10進数の範囲数に変換して、それから関係があるかどうかを判断します.
上記のいくつかの方法により、様々なタイプのipアドレスが関係判断を含むことを完璧に解決することができる.
まとめ
以上、編集者がご紹介したpythonが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アドレスの含む関係判断を実現するのに役立つことを願っています.