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相关推荐

  1. 两个半小时,一份Python基础试卷,满分100,却有80%的人都不及格

    两个半小时,一份Python基础试卷,满分100,却有80%的人都不及格 Python基础类型考试题 考试时间:90分钟 满分100(80分以上为及格) 如果不给你答案的话,你能及格? 1.件数变量命 ...

  2. python字符串能减吗_在python中减去两个字符串(Subtract two strings in python)

    在python中减去两个字符串(Subtract two strings in python) 我应该计算两个不同列表的元素之间的差异. 这是我的代码: import operator a = ['5 ...

  3. python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...

    深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码),矩阵,样本,模型,类别,真实 深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码) 深度学习自学记录(3) ...

  4. 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类函数的问 ...

  5. 未来两年我们即将要读的Python书!

    学好Python,能让你成为一个更好的程序员.那么我们为什么要学Python呢? 跟C/C++/Java相比: Python能让你用少的多的多的代码写出相同的程序. 跟VB/PHP比较:跟PHP/VB ...

  6. 通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯问题

    通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯问题 参考文章: (1)通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯 ...

  7. 你还为没有数据测试而发愁吗?介绍一个专业Fake的python库,什么个人信息、IP、UserAgent统统搞定

    小编经常需要批量测试一些数据,有时候测试环境又暂时没数据,特意找了一下,发现有一个可批量生成数据的python库----faker,现在就介绍一下它的使用方法,如果你不想一行一行输入代码,那小编页提供 ...

  8. python如何将两个list合并成字典_怎么把两个列表合并成字典 论Python怎样将两个list合并为一个字典...

    Python怎样把2个列表合成为一个字典? 怎样把2个列表合成一个字典里了?如果你从一开始就选择低下头的话你就可以一直低着头.可是如果你一开始选择了昂着头的话你就永远不能低头了.荣辱说到底只是一瞬间的 ...

  9. Redis遍历、模糊匹配key的两个命令keys、scan(python使用Redis)

    Redis遍历.模糊匹配key的两个命令keys.scan(python使用Redis) (1)全量遍历–keys命令 获取Redis中的所有键: import redis pool=redis.Co ...

最新文章

  1. maven 多环境打包
  2. 指针 与 swift 中的引用
  3. maven多模块eclipse jetty热部署
  4. 我的微信luogantt
  5. Java洛谷P5461 赦免战俘讲解
  6. BugKuCTF 杂项 闪的好快
  7. ftp之高级配置——虚拟用户
  8. 云计算三重奏:SAAS、PAAS和IAAS
  9. bzoj 1630 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁(有重复元素的组合数)
  10. Size Classes with Xcode 6
  11. 可视化基础讲解之色彩搭配!
  12. 2021-4-28 合抱之木,生于毫末,九层之台,起于垒土
  13. 《智慧工地单点解析系列(一)—— 劳务实名制》
  14. 连云港师范专科学校计算机老师,喜报:我校学生在2021年中国大学生计算机设计比赛江苏省赛中获一等奖...
  15. 美联储历次加息周期及结果
  16. 中国风?古典系?AI中文绘图创作尝鲜!⛵
  17. MacBook怎样装Win10 双系统玩转Win10
  18. matlab里面floor是什么意思,matlab中的fix、round、floor、ceil的区别与含义
  19. 关于如何快速学好,学懂Linux内核。内含学习路线
  20. 电大 专科 计算机应用,2015春中央电大计算机应用基础(专科)平时作业(3)

热门文章

  1. 【Android应用开发技术:用户界面】界面导航设计
  2. WinMain:应用程序入口点【WinMain: The Application Entry Point】
  3. 女神是麦当娜男神是小沈阳
  4. 数据分析课设(SPSS,EVIEWS,R)【理论】
  5. rsyncd.conf 文件man手册翻译
  6. 统计学之Bonferroni-corrected
  7. 将波旁威士忌的整洁Mixins提升到新的水平
  8. Altium Designer 18 原理图编译出现off grid错误处理方法
  9. linux sh解释器
  10. FreeRTOSMini