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通过colorama模块在控制台输出彩色文字的方法
Mar 19 Python
在Python中操作字符串之replace()方法的使用
May 19 Python
python创建列表和向列表添加元素的实现方法
Dec 25 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
python实现自动发送报警监控邮件
Jun 21 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
Python搭建代理IP池实现接口设置与整体调度
Oct 27 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
教你使用Python获取QQ音乐某个歌手的歌单
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加速 eAccelerator配置和使用指南
2009/06/05 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
input 高级限制级用法
2009/03/26 Javascript
Ext 今日学习总结
2010/09/19 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
建龙钢铁面试总结
2014/04/15 面试题
公司面试感谢信
2014/02/01 职场文书
党员转正介绍人意见
2015/06/03 职场文书
开票证明
2015/06/23 职场文书
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript