两个处理IP好用的Python库ipaddr和netaddr
Python中关于IP处理的两个模块
这里介绍的两个处理IP好用的Python库名为:ipaddr和netaddr
顺便提一个不好用的:IPy。上面两个能完全胜任这个库的功能,但这个库容错性不好,常报错。
1.ipaddr简单介绍:
Google开发的IP处理模块,地址:http://pythonhosted.org/ipaddr/
可用pip安装:pip install ipaddr
所有包含的类和方法使用help命令查看:
help(ipaddr)
Class总共分为:BaseIP、IPv4、IPv6
ipaddr.IPv4Network() ipv4网段对象建立
ipaddr.IPv6Network() ipv6网段对象建立
ipaddr.IPAddress(address, version) 单个ipv4地址对象建立
DEMO:
1)判断一个IP地址是否在某个网段内:
>>> import ipaddr
>>>
>>> ip = ipaddr.IPv4Address("192.168.1.1")
>>> ipNet = ipaddr.IPv4Network("192.168.1.0/23")
>>> print ip in ipNet
True
返回True没问题,若不属于包含关系返回False
2)判断一个网段是否属于另一个网段:
>>> ipNetA = ipaddr.IPv4Network("192.168.1.0/24")
>>> ipNetB = ipaddr.IPv4Network("192.168.0.0/16")
>>> print ipNetA in ipNetB
True
3)判断是否属于内网IP:
>>> ip = ipaddr.IPv4Address("1.1.1.1")
>>> print ip.is_private
False
4)判断是否属于内网网段:
>>> ipNet = ipaddr.IPv4Network("10.123.1.0/24")
>>> print ipNet.is_private
True
5)返回子网中IP个数:
>>> ipNet = ipaddr.IPv4Network("192.168.0.0/16")
>>> print ipNet.numhosts
65536
6)遍历网段中所有IP:
>>> ipNet = ipaddr.IPv4Network("192.168.0.1/32")
>>> for ip in ipNet:print isinstance(ip, ipaddr.IPv4Address)print str(ip)True
192.168.0.1
注意,这里遍历时返回的元素是ipaddr.IPv4Address对象,不是一个IP字符串,但可以转换。
7)根据索引访问网段中的某个IP:
>>> ipNet = ipaddr.IPv4Network("192.168.0.0/24")
>>> print str(ipNet[3])
192.168.0.3
2.netaddr介绍
也使用pip安装:pip install netaddr
help命令查看所有类和方法:
help(netaddr)
文档地址:https://netaddr.readthedocs.io/en/latest/
DEMO:
1)掩码转换:
>>> import netaddr
>>>
>>> ipNetList = netaddr.iprange_to_cidrs("192.168.1.1", "192.168.1.100")
>>> print ipNetList
[IPNetwork('192.168.1.1/32'), IPNetwork('192.168.1.2/31'), IPNetwork('192.168.1.4/30'), IPNetwork('192.168.1.8/29'), IPNetwork('192.168.1.16/28'), IPNetwork('192.168.1.32/27'), IPNetwork('192.168.1.64/27'), IPNetwork('192.168.1.96/30'), IPNetwork('192.168.1.100/32')]
2)合并IP:
>>> ipList = [netaddr.IPAddress("1.1.1.1"), netaddr.IPAddress("1.1.1.2")]
>>> print netaddr.cidr_merge(ipList)
[IPNetwork('1.1.1.1/32'), IPNetwork('1.1.1.2/32')]
3)当然也可以合并网段:
>>> ipList = [netaddr.IPNetwork("1.1.3.0/23"), netaddr.IPNetwork("1.1.0.0/22")]
>>> print netaddr.cidr_merge(ipList)
[IPNetwork('1.1.0.0/22')]
网段和单个IP混合合并也可以。
两个处理IP好用的Python库ipaddr和netaddr相关推荐
- 两个半小时,一份Python基础试卷,满分100,却有80%的人都不及格
两个半小时,一份Python基础试卷,满分100,却有80%的人都不及格 Python基础类型考试题 考试时间:90分钟 满分100(80分以上为及格) 如果不给你答案的话,你能及格? 1.件数变量命 ...
- python字符串能减吗_在python中减去两个字符串(Subtract two strings in python)
在python中减去两个字符串(Subtract two strings in python) 我应该计算两个不同列表的元素之间的差异. 这是我的代码: import operator a = ['5 ...
- python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...
深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码),矩阵,样本,模型,类别,真实 深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码) 深度学习自学记录(3) ...
- python为什么closed_为什么python类的函数被调用两次[关闭](Why a function of python class is called twice [closed])...
为什么python类的函数被调用两次[关闭](Why a function of python class is called twice [closed]) 我遇到了两次调用的python类函数的问 ...
- 未来两年我们即将要读的Python书!
学好Python,能让你成为一个更好的程序员.那么我们为什么要学Python呢? 跟C/C++/Java相比: Python能让你用少的多的多的代码写出相同的程序. 跟VB/PHP比较:跟PHP/VB ...
- 通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯问题
通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯问题 参考文章: (1)通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯 ...
- 你还为没有数据测试而发愁吗?介绍一个专业Fake的python库,什么个人信息、IP、UserAgent统统搞定
小编经常需要批量测试一些数据,有时候测试环境又暂时没数据,特意找了一下,发现有一个可批量生成数据的python库----faker,现在就介绍一下它的使用方法,如果你不想一行一行输入代码,那小编页提供 ...
- python如何将两个list合并成字典_怎么把两个列表合并成字典 论Python怎样将两个list合并为一个字典...
Python怎样把2个列表合成为一个字典? 怎样把2个列表合成一个字典里了?如果你从一开始就选择低下头的话你就可以一直低着头.可是如果你一开始选择了昂着头的话你就永远不能低头了.荣辱说到底只是一瞬间的 ...
- Redis遍历、模糊匹配key的两个命令keys、scan(python使用Redis)
Redis遍历.模糊匹配key的两个命令keys.scan(python使用Redis) (1)全量遍历–keys命令 获取Redis中的所有键: import redis pool=redis.Co ...
最新文章
- maven 多环境打包
- 指针 与 swift 中的引用
- maven多模块eclipse jetty热部署
- 我的微信luogantt
- Java洛谷P5461 赦免战俘讲解
- BugKuCTF 杂项 闪的好快
- ftp之高级配置——虚拟用户
- 云计算三重奏:SAAS、PAAS和IAAS
- bzoj 1630 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁(有重复元素的组合数)
- Size Classes with Xcode 6
- 可视化基础讲解之色彩搭配!
- 2021-4-28 合抱之木,生于毫末,九层之台,起于垒土
- 《智慧工地单点解析系列(一)—— 劳务实名制》
- 连云港师范专科学校计算机老师,喜报:我校学生在2021年中国大学生计算机设计比赛江苏省赛中获一等奖...
- 美联储历次加息周期及结果
- 中国风?古典系?AI中文绘图创作尝鲜!⛵
- MacBook怎样装Win10 双系统玩转Win10
- matlab里面floor是什么意思,matlab中的fix、round、floor、ceil的区别与含义
- 关于如何快速学好,学懂Linux内核。内含学习路线
- 电大 专科 计算机应用,2015春中央电大计算机应用基础(专科)平时作业(3)