一、使用IPy中的IP方法迅速格式化
(1)查看地址是IPv4还是IPv6
>>> from IPy import IP
>>> IP('10.0.0.0/8').version()
4
>>> IP('::1').version()
6
>>>
(2)格式化输出IPv4和IPv6的地址
>>> from IPy import IP
>>> print(IP('127.0.0.1'))
127.0.0.1
>>> print(IP('10'))
10.0.0.0
>>> print(IP('0x7f000001'))
127.0.0.1
>>> print(IP(0x7f000001))
127.0.0.1
>>> print(IP('1080:0:0:0:8:800:200C:417A'))
1080::8:800:200c:417a
>>> print(IP('1080::8:800:200C:417A'))
1080::8:800:200c:417a
>>> print(IP('::1'))
::1
>>> print(IP('::13.1.68.3'))
::d01:4403
(3)子网掩码及网段前缀转换
>>> from IPy import IP
>>> print(IP('1.0.0.0/8'))
1.0.0.0/8
>>> print(IP('1.0.0.0/255.0.0.0'))
1.0.0.0/8
>>> print(IP('1.0.0.0-1.255.255.255'))
1.0.0.0/8
(4)已知IP地址的子网掩码,快速求出该地址所在的网段
>>> from IPy import IP
>>> print(IP('127.0.0.1/255.0.0.0', make_net=True))
127.0.0.0/8
>>> print(IP('12.1.0.1').make_net('255.255.255.224'))
12.1.0.0/27
二、IPy中的IP方法格式化的高级用法
(1)IPy中IP地址格式转换的高级用法
>>> from IPy import IP
>>> ip_address = IP('192.168.100.3')
>>> ip.reverseNames()
>>> ip_address.reverseNames() #反向解析地址格式
['3.100.168.192.in-addr.arpa.']
>>> ip_address.iptype() #解析地址的“公网、私网属性” 192.168.100.0为私有网段
'PRIVATE'
>>> ip_address.int() #把192.168.100.3转换成整数
3232261123
>>> ip_address.strHex() #把192.168.100.3转换成十六进制数
'0xc0a86403'
>>> ip_address.strBin() #把192.168.100.3转换成二进制数
'11000000101010000110010000000011'
>>> print(IP(0xc0a86403)) #把十六进制数0xc0a86403转换成点分十进制192.168.100.3
192.168.100.3
(2)IPy将IP地址转换成字符串的方法:
可以通过strNomal方法指定不同的wantprefixlen参数定制不同输出类型的网段输出为字符串。
wantprefixlen = 0 ,无返回的意思
wantprefixlen = 1 ,返回前缀的类型
wantprefixlen = 2 ,返回网段/子网掩码的类型
wantprefixlen = 3 ,返回IP地址范围的类型
示例:
>>> from IPy import IP
>>> IP('10.0.0.0/24').strNormal()
'10.0.0.0/24'
>>> IP('10.0.0.0/24').strNormal(0)
'10.0.0.0'
>>> IP('10.0.0.0/24').strNormal(1)
'10.0.0.0/24'
>>> IP('10.0.0.0/24').strNormal(2)
'10.0.0.0/255.255.255.0'
>>> IP('10.0.0.0/24').strNormal(3)
'10.0.0.0-10.0.0.255'
三、使用IPy中的IP方法处理IP地址段的包含关系
涉及处理两个网段是否包含的关系,IPy中的IP方法也提供了这个功能,他会返回一个布尔值告诉我们是否包含:
(1)判断两个IP网段的大小:
>>> from IPy import IP
>>> IP('1.1.1.0/24') < IP('2.2.2.0/24')
True
(2)判断一个IP地址是否包含于另一个IP网段
>>> from IPy import IP
>>> '192.168.100.1' in IP('192.168.100.0/27')
True
(3)判断一个IP网段是否被另一个IP网段包含
>>> from IPy import IP
>>> IP('192.168.2.0/24') in IP('192.168.0.0/23')
False
>>>
>>>
>>>
>>> from IPy import IP
>>> IP('192.168.1.0/24') in IP('192.168.0.0/23')
True
(4)使用IPy中的IPSet方法汇总不连续的IP网段
IPy中还提供了IPSet这个神奇的方法来达成汇总网段的目的。非常灵活。下面来看看方法:
>>> from IPy import IP, IPSet
>>> IPSet([IP('192.168.0.0/30'), IP('192.168.0.4/30'),IP('192.168.0.8/30'), IP('192.168.0.12/30')])
IPSet([IP('192.168.0.0/28')])
注意IPSet的数据类型是集合Set中的列表。