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 27 Python
python实用代码片段收集贴
Jun 03 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
Python卸载模块的方法汇总
Jun 07 Python
Python简单生成8位随机密码的方法
May 24 Python
Python实现的读写json文件功能示例
Jun 05 Python
深入了解Python枚举类型的相关知识
Jul 09 Python
Python绘制热力图示例
Sep 27 Python
python 求10个数的平均数实例
Dec 16 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
python如何保存文本文件
Jun 07 Python
详解pandas apply 并行处理的几种方法
Feb 24 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 adodb介绍
2009/03/19 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
javascript 新浪背投广告实现代码
2009/07/07 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
Python实现字典的key和values的交换
2015/08/04 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
银行自荐信范文
2013/10/07 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
请假条范文大全
2014/04/10 职场文书
医药销售自荐书
2014/05/29 职场文书
国企干部对照检查材料
2014/08/22 职场文书
社区创先争优承诺书
2014/08/30 职场文书
三行辞职书范文
2015/02/26 职场文书
校长新学期寄语2016
2015/12/04 职场文书