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中为feedparser设置超时时间避免堵塞
Sep 28 Python
跟老齐学Python之for循环语句
Oct 02 Python
Python正则表达式使用经典实例
Jun 21 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 Python
python统计指定目录内文件的代码行数
Sep 19 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
Python 实现将某一列设置为str类型
Jul 14 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
Python turtle实现贪吃蛇游戏
Jun 18 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
Windows下的PHP5.0详解
2006/11/18 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
Python闭包函数定义与用法分析
2018/07/20 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Django用户身份验证完成示例代码
2020/04/03 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
合作协议书范本
2014/04/17 职场文书
培训通知
2015/04/17 职场文书
考勤制度通知
2015/04/25 职场文书
公司员工管理制度
2015/08/04 职场文书
Python 中的 copy()和deepcopy()
2021/11/07 Python
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电