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中用Ctrl+C终止多线程程序的问题解决
Mar 30 Python
详解Django中的权限和组以及消息
Jul 23 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
Nov 06 Python
Django基础知识 URL路由系统详解
Jul 18 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
django实现将修改好的新模型写入数据库
Mar 31 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
django 模型中的计算字段实例
May 19 Python
python实现人工蜂群算法
Sep 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
8个必备的PHP功能实例代码
2013/10/27 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
css配合jquery美化 select
2013/11/29 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
JavaScript 禁止用户保存图片的实现代码
2020/04/28 Javascript
Python制作爬虫采集小说
2015/10/25 Python
python实现词法分析器
2019/01/31 Python
详解Python locals()的陷阱
2019/03/26 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
python自动下载图片的方法示例
2020/03/25 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
zooplus波兰:在线宠物店
2019/07/21 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
初级Java程序员面试题
2016/03/03 面试题
个人实习生的自我评价
2014/02/16 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
党员承诺书格式
2014/05/21 职场文书
授权收款委托书
2014/09/23 职场文书
党员倡议书
2015/01/19 职场文书
庐山导游词
2015/02/03 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python