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之集合(set)
Sep 24 Python
python线程、进程和协程详解
Jul 19 Python
解决python opencv无法显示图片的问题
Oct 28 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
Python八皇后问题解答过程详解
Jul 29 Python
Python学习笔记之Django创建第一个数据库模型的方法
Aug 07 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
使用 Python 处理3万多条数据只要几秒钟
Jan 19 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
keras 指定程序在某块卡上训练实例
Jun 22 Python
python如何快速拼接字符串
Oct 28 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
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
python装饰器与递归算法详解
2016/02/18 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
运行时异常与一般异常有何异同?
2014/01/05 面试题
函数指针的定义是什么
2016/08/14 面试题
应届生高等护理求职信
2013/10/12 职场文书
聚美优品励志广告词
2014/03/14 职场文书
委托公证书范本
2014/04/03 职场文书
安全生产宣传标语
2014/06/06 职场文书
质量主管工作职责
2014/09/26 职场文书
vue 实现上传组件
2021/05/31 Vue.js