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地址的包含关系判断的更多相关文章

  1. python实现IP地址转换为32位二进制

    python实现IP地址转换为32位二进制 #!/usr/bin/env python # -*- coding:utf-8 -*- class IpAddrConverter(object): de ...

  2. python对ip地址排序、对列表进行去重

    一:使用python对ip地址排序所用代码示例一: import socket iplist = ['10.5.11.1','192.168.1.33','10.5.2.4','10.5.1.3',' ...

  3. Python实现IP地址归属地查询

    一.使用淘宝IP地址库查询 使用淘宝的Rest API,可以快速查询IP地址的归属地: 图00-淘宝IP地址库RestAPI使用说明 图01-使用淘宝免费IP地址库-查询IP归属地 存在问题:淘宝的免 ...

  4. Linux下Python获取IP地址

    <lnmp一键安装包>中需要获取ip地址,有2种情况:如果服务器只有私网地址没有公网地址,这个时候获取的IP(即私网地址)不能用来判断服务器的位置,于是取其网关地址用来判断服务器在国内还是 ...

  5. python模块--ip地址转换为整数

    python整数与IP地址转换 [转] 我们有时会将一个整数与IP地址进行互换,用python代码实现很简单 将一个整数如2000000,变为一个IP地址的方式 >>> import ...

  6. python检查IP地址正确性

    一.自动动手,丰衣足食 #encoding=utf-8 import os,sys def check_ip(ipaddr): addr = ipaddr.strip().split('.') #切割 ...

  7. python 查找IP地址归属地

    #!/usr/bin/env python # -*- coding: utf-8 -*- #查找IP地址归属地 #writer by keery_log #Create time:2013-10-3 ...

  8. python匹配ip地址

    ip地址是用3个'.'号作为分隔符,分割4个数字,每个数字的取值在[0,255],一般日志文件中的ip地址都是有效的ip地址,不需要我们再去验证,因此,若从日志文件中提取ip,那么可以简单写成这样: ...

  9. Python 输入IP地址及掩码告诉你该网段包含的全部地址(IPy模块练习)

    IPy模块原本使用时需要输入正确的网络位和掩码,我利用处理报错的机制实现了输入任意IP地址和掩码均可正确输出结果的小程序. #!/usr/bin/env python # -*- coding: ut ...

随机推荐

  1. mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?一步步解析

    序言 在开始正文之前,首先解释Dao接口和XML文件里的SQL是如何一一对应的? 一句话讲完就是:mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟d ...

  2. javaweb项目添加log4j日志

    谈到我们在Java程序中经常用的日志,Log4j应该是耳熟能详了.这里先提下slf4j,英文全名是Simple Logging Facade for Java,直面意思是:Java的简单日志门面.sl ...

  3. SpringJDBC的使用(转载)

    转载自   https://www.yiibai.com/spring/maven-spring-jdbc-example.html 工具: eclipse4.7.2及mysql-8.0.13 项目最 ...

  4. 【题解】P4755 Beautiful Pair(启发式合并的思路+分治=启发式分治)

    [题解]P4755 Beautiful Pair upd: 之前一个first second烦了,现在AC了 由于之前是直接抄std写的,所以没有什么心得体会,今天自己写写发现 不知道为啥\(90\) ...

  5. 洛谷$P4177\ [CEOI2008]\ order$ 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 开始看感$jio$长得好像和太空飞行计划差不多的,,,然后仔细康康发现还有租操作,,, 按一般的套路碰到这样儿的一般就先按非特殊化的建图然后考虑怎么实现这个 ...

  6. $Poj1037\ A\ Decorative\ Fence$ 计数类$DP$

    Poj  AcWing Description Sol 这题很数位$DP$啊, 预处理$+$试填法 $F[i][j][k]$表示用$i$块长度不同的木板,当前木板(第$i$块)在这$i$块木板中从小到 ...

  7. gulp的简介以及使用方法

    环境介绍: pro环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境. pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样. test环境:测试环境,外部用户 ...

  8. 21.pyinstaller相关参数

    pyinstaller相关参数                  命令                                                          描述  -F, ...

  9. 微信小程序之双重循环(包含左滑删除,以及数据各项处理)

    <view wx:for="{{hommer}}" wx:for-item="item" wx:for-index="index" w ...

  10. CF1200E Compress Words | 字符串hash

    传送门 Examples input 1 5 I want to order pizza output 1 Iwantorderpizza input 2 5 sample please ease i ...