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 类与元类的深度挖掘 II【经验】
May 06 Python
Python3 模块、包调用&amp;路径详解
Oct 25 Python
理解python中生成器用法
Dec 20 Python
wxPython之解决闪烁的问题
Jan 15 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
pandas的相关系数与协方差实例
Dec 27 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
150行Python代码实现带界面的数独游戏
Apr 04 Python
matplotlib quiver箭图绘制案例
Apr 17 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 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中调用JAVA
2006/10/09 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
Python continue语句用法实例
2014/03/11 Python
python3实现点餐系统
2019/01/24 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
pandas数据处理进阶详解
2019/10/11 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
python中doctest库实例用法
2020/12/31 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
网页设计个人找工作求职信
2013/11/28 职场文书
劳动实践课感言
2014/02/01 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
公司感谢信范文
2015/01/22 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python