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实现对excel文件列表值进行统计的方法
Jul 25 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
Nov 14 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
Feb 07 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
python中的plt.cm.Paired用法说明
May 31 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
javascript 数组排序函数
2009/08/20 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
javascript数组详解
2014/10/22 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
python文件比较示例分享
2014/01/10 Python
python中requests库session对象的妙用详解
2017/10/30 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
如何理解python面向对象编程
2020/06/01 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
python开发前景如何
2020/06/11 Python
html5清空画布方法(三种)
2017/10/16 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
应届毕业生自我鉴定范文
2013/12/27 职场文书
读书活动总结范文
2014/04/26 职场文书
公司周年庆活动方案
2014/08/25 职场文书
小学运动会入场词
2015/07/18 职场文书
导游词之无锡梅园
2019/11/28 职场文书
JavaScript 对象创建的3种方法
2021/11/17 Javascript
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python