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实现简单爬虫功能的示例
Oct 24 Python
python django事务transaction源码分析详解
Mar 17 Python
Python实现的排列组合计算操作示例
Oct 13 Python
python实现简易云音乐播放器
Jan 04 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
Python 字符串与数字输出方法
Jul 16 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
Python中format()格式输出全解
Apr 12 Python
基于python修改srt字幕的时间轴
Feb 03 Python
python两种获取剪贴板内容的方法
Nov 06 Python
python中numpy.empty()函数实例讲解
Feb 05 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
jQuery源码分析之Event事件分析
2010/06/07 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
JS重载实现方法分析
2016/12/16 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
Python探索之pLSA实现代码
2017/10/25 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
python获取地震信息 微信实时推送
2019/06/18 Python
浅谈python3中input输入的使用
2019/08/02 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
爱游人:Travelliker
2017/09/05 全球购物
买卖协议书范本
2014/04/21 职场文书
创先争优公开承诺书
2014/08/30 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
Nginx实现会话保持的两种方式
2022/03/18 Servers
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android