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使用PyV8执行javascript代码示例分享
Dec 04 Python
从零学python系列之新版本导入httplib模块报ImportError解决方案
May 23 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
Linux下python制作名片示例
Jul 20 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
Pycharm新手教程(只需要看这篇就够了)
Jun 18 Python
python 日期排序的实例代码
Jul 11 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
python实现UDP协议下的文件传输
Mar 20 Python
python学习将数据写入文件并保存方法
Jun 07 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
详解Python内置模块Collections
Mar 22 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
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
jQuery 对象中的类数组操作
2009/04/27 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
koa源码中promise的解读
2018/11/13 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python读写ini文件的方法
2015/05/28 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
幼儿园春季开学通知
2015/07/16 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
MySQL触发器的使用
2021/05/24 MySQL
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸