python IP处理模块 IPy

来源:互联网 发布:剑网三喵姐捏脸数据 编辑:程序博客网 时间:2024/06/04 19:18

IPy模块提供了专门针对IPV4地址与IPV6地址的类与工具,可以帮助实现计算子网掩码、网络掩码、广播地址、子网数、IP类型等。

模块的安装

可以使用pip命令

pip install IPy

也可以在网站下载

wget https://pypi.python.org/packages/source/I/IPy-0.81.tar.gz --no-check-certificatetar -zxvf IPy-0.81.tar.gz.cd IPy-0.81python setup.py install

IP类型格式与网段的处理

对于的分类可以简单的分为IPV4地址和IPV6地址,对其使用version()方法,可以获取IP的类型

>>> from IPy import IP>>> IP('125.0.0.0/8').version()4>>> IP('::1').version()6

当返回4的时候表明是一个IPV4地址,当返回是6的时候表明是一个IPV6地址。

可以使用一个for循环来输出同一网段所有的IP地址,len()方法可以获取同网段Ip的个数
IP个数

>>> testIP=IP('125.0.0.0/8')>>> testIP.len()16777216

打印所有同网段IP地址

>>> testIP=IP('127.0.0.0/30')>>> for i in testIP:...     print i...127.0.0.0127.0.0.1127.0.0.2127.0.0.3

其他的一些常用的对IP类的方法

reverseNames() 返回IP的反向地址解析模式
iptype() 返回IP地址的类型
int() 将IP地址转换为整数格式
strHex() 将IP地址转换为16进制格式
strBin() 将IP地址转换为二进制格式
net() 输出其网络地址
netmask() 输出其网络掩码

都是对IP类的方法所以使用只需要在IP类后头’.’+方法名即可

对IP类的一些简单操作方法

在IP类的打印时,可以通过设置make_net参数,使其转换为网络地址

>>> print(IP('192.168.1.0').make_net('255.255.255.0'))192.168.1.0/24>>> print(IP('192.168.1.0',make_net=True))192.168.1.0>>> print(IP('192.168.1.0/255.255.255.0',make_net=True))192.168.1.0/24>>> print(IP('192.168.1.0-192.168.1.255',make_net=True))192.168.1.0/24

通过设置wantprefixlen然后使用strNormal()方法来将IP地址转换为字符串类型
官方文档是这样对wantprefixlen的参数进行注释的

wantprefixlen == 0 / None     don't return anything(只返回一个IP地址)   1.2.3.0wantprefixlen == 1            /prefix                1.2.3.0/24wantprefixlen == 2            /netmask                1.2.3.0/255.255.255.0wantprefixlen == 3            -lastip ()                1.2.3.0-1.2.3.255

以下是例子

>>> IP('192.168.1.0/24').strNormal(0)'192.168.1.0'>>> IP('192.168.1.0/24').strNormal(1)'192.168.1.0/24'>>> IP('192.168.1.0/24').strNormal(2)'192.168.1.0/255.255.255.0'>>> IP('192.168.1.0/24').strNormal(3)'192.168.1.0-192.168.1.255'>>>

判断IP地址和网段是否在另一个网段中
IP类可以支持类似数值的比较

>>> '192.168.1.100' in IP('192.168.1.0/24')True

判断两个网段是否存在重叠,可以使用overlaps方法

>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')1>>> IP('192.168.0.0/23').overlaps('192.168.5.0/24')0

1表示存在重叠,0表示不存在重叠

原创粉丝点击