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之入门(四)运算
May 27 Python
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
Python写的一个简单监控系统
Jun 19 Python
Python自动扫雷实现方法
Jul 25 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
python3 读取Excel表格中的数据
Oct 16 Python
python浪漫表白源码
Apr 05 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
python圣诞树编写实例详解
Feb 13 Python
Django 设置多环境配置文件载入问题
Feb 25 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
Python实现文字pdf转换图片pdf效果
Apr 03 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中var_export与var_dump的区别分析
2010/08/21 PHP
php中file_exists函数使用详解
2015/05/08 PHP
PHP安全下载文件的方法
2016/04/07 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
一些技巧性实用js代码小结
2009/10/14 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
详解Python3.1版本带来的核心变化
2015/04/07 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
详解小白之KMP算法及python实现
2019/04/04 Python
Django用户认证系统 User对象解析
2019/08/02 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
Python Selenium参数配置方法解析
2020/01/19 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
学前教育专业毕业生自荐信
2013/10/03 职场文书
二年级数学教学反思
2014/01/21 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
《法国号》教学反思
2016/02/22 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
SQL SERVER存储过程用法详解
2022/02/24 SQL Server