python实现ip地址的包含关系判断


Posted in Python onFebruary 07, 2020

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地址的包含关系判断,希望对大家有所帮助!

Python 相关文章推荐
Python sys.path详细介绍
Oct 17 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
Python和Java进行DES加密和解密的实例
Jan 09 Python
python安装教程
Feb 28 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
Oct 23 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 #Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 #Python
Python continue语句实例用法
Feb 06 #Python
Tensorflow限制CPU个数实例
Feb 06 #Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 #Python
python range实例用法分享
Feb 06 #Python
tensorflow 报错unitialized value的解决方法
Feb 06 #Python
You might like
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
php 数学运算验证码实现代码
2009/10/11 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
PHP静态文件生成类实例
2014/11/29 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
用js实现in_array的方法
2013/11/05 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
javaScript基础详解
2017/01/19 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
vue动态配置模板 'component is'代码
2019/07/04 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
python和php哪个更适合写爬虫
2020/06/22 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
super关键字的用法
2012/04/10 面试题
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
投资建议书模板
2014/05/12 职场文书
党员目标管理责任书
2014/07/25 职场文书
污染环境建议书
2015/09/14 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
python中pycryto实现数据加密
2022/04/29 Python