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验证码识别的示例代码
Sep 21 Python
Python 实现12306登录功能实例代码
Feb 09 Python
几种实用的pythonic语法实例代码
Feb 24 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
python matlibplot绘制多条曲线图
Feb 19 Python
Python3爬楼梯算法示例
Mar 04 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
python设置随机种子实例讲解
Sep 12 Python
python Opencv计算图像相似度过程解析
Dec 03 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 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实现图片简单上传
2006/10/09 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
python文件和目录操作方法大全(含实例)
2014/03/12 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
西班牙手机之家:Phone House
2018/10/18 全球购物
JAVA高级程序员面试题
2013/09/06 面试题
设计总监岗位职责
2013/12/07 职场文书
治超工作实施方案
2014/05/04 职场文书
企业文化标语大全
2014/06/10 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
python实现简单反弹球游戏
2021/04/12 Python
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
Nginx配置https的实现
2021/11/27 Servers
Python中的socket网络模块介绍
2022/07/23 Python