python实现ip地址的包含关系判断
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实现IP地址转换为32位二进制
python实现IP地址转换为32位二进制 #!/usr/bin/env python # -*- coding:utf-8 -*- class IpAddrConverter(object): de ...
- python对ip地址排序、对列表进行去重
一:使用python对ip地址排序所用代码示例一: import socket iplist = ['10.5.11.1','192.168.1.33','10.5.2.4','10.5.1.3',' ...
- Python实现IP地址归属地查询
一.使用淘宝IP地址库查询 使用淘宝的Rest API,可以快速查询IP地址的归属地: 图00-淘宝IP地址库RestAPI使用说明 图01-使用淘宝免费IP地址库-查询IP归属地 存在问题:淘宝的免 ...
- Linux下Python获取IP地址
<lnmp一键安装包>中需要获取ip地址,有2种情况:如果服务器只有私网地址没有公网地址,这个时候获取的IP(即私网地址)不能用来判断服务器的位置,于是取其网关地址用来判断服务器在国内还是 ...
- python模块--ip地址转换为整数
python整数与IP地址转换 [转] 我们有时会将一个整数与IP地址进行互换,用python代码实现很简单 将一个整数如2000000,变为一个IP地址的方式 >>> import ...
- python检查IP地址正确性
一.自动动手,丰衣足食 #encoding=utf-8 import os,sys def check_ip(ipaddr): addr = ipaddr.strip().split('.') #切割 ...
- python 查找IP地址归属地
#!/usr/bin/env python # -*- coding: utf-8 -*- #查找IP地址归属地 #writer by keery_log #Create time:2013-10-3 ...
- python匹配ip地址
ip地址是用3个'.'号作为分隔符,分割4个数字,每个数字的取值在[0,255],一般日志文件中的ip地址都是有效的ip地址,不需要我们再去验证,因此,若从日志文件中提取ip,那么可以简单写成这样: ...
- Python 输入IP地址及掩码告诉你该网段包含的全部地址(IPy模块练习)
IPy模块原本使用时需要输入正确的网络位和掩码,我利用处理报错的机制实现了输入任意IP地址和掩码均可正确输出结果的小程序. #!/usr/bin/env python # -*- coding: ut ...
随机推荐
- MYSQL调优实战
一:基础数据准备 DROP TABLE IF EXISTS `tbl_user`; CREATE TABLE `tbl_user` ( `id` ) NOT NULL AUTO_INCREMENT, ...
- 机器学习算法概述第五章——CART算法
特点: 是一个二叉树,元素可以重复利用,可以做回归也可以做分类,分类用最小二乘法,即误差平方和最小 切割方法: 对于可量化的x来说: 切割点通常为两个x的平均值 左右两部分分别取均值,再评判以哪个分割 ...
- hdu3499---玄学的分层图
枚举固然可以,但是我还是想看看分层图.... 如本题所述 ,从上图到下图就是一个折扣的过程,上部分只有一种办法下去,下部分图没有办法去上面,该模型十分的巧妙啊!!! 下面我来演示一下自己改的样例吧 紫 ...
- 洛谷$P4503\ [CTSC2014]$企鹅$QQ$ 哈希
正解:哈希 解题报告: 传送门$QwQ$ 直接$O(len)$枚举哪一位,然后把这一位删了重新拼接起来,存桶里查下就成 $over$? 主要的难点大概在卡哈希+卡常$QAQ$ #include< ...
- 洛谷$P$3301 $[SDOI2013]$方程 $exLucas$+容斥
正解:$exLucas$+容斥 解题报告: 传送门! 在做了一定的容斥的题之后再看到这种题自然而然就应该想到容斥,,,? 没错这题确实就是容斥,和这题有点儿像 注意下的是这里的大于和小于条件处理方式不 ...
- leetcode.310最小高度树
对于一个具有树特征的无向图,我们可选择任何一个节点作为根.图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树.给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点. ...
- ReentrantLock 源码分析从入门到入土
回答一个问题 在开始本篇文章的内容讲述前,先来回答我一个问题,为什么 JDK 提供一个 synchronized 关键字之后还要提供一个 Lock 锁,这不是多此一举吗?难道 JDK 设计人员都是沙雕 ...
- ElementUi 两个表格反选
ElementUi 两个表格反选 1.先看看实现的图 表格内容显示 <el-row :gutter="20"> <el-col :span="16&qu ...
- 解决 Table ‘performance_schema.session_variables’ doesn’t exist 问题
performance_schema在mysql5.5以上就有自带 performance_schema(安装数据库时自带的)如果装数据库或者使用数据时不小心删除了,就会出现Table‘perform ...
- beetlex网关之聚合和url请求过虑
在这里主要介绍beetlex应用网关的两个插件,分别是聚合和url请求过虑.通过聚合插件可以把整合多个请求的数据来应答请求端,而Url请求过虑同可以拒绝一些有非常关键字的请求. 请求聚合 在网关服务中 ...