IPy模块是用来处理IPv4和IPv6地址的网络类工具
1.通过网段输出该网段下的IP个数和IP清单
>>> from IPy import IP
>>> ip = IP('192.168.1.0/29')
>>> ip.len()
8
>>> for x in ip:
... print(x)
...
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
2.IP版本,反向解析,IP类型,IP转换等
>>> IP('10.0.0.0/8').version()
4 #IPv4版本
>>> IP('::1').version()
6 #IPv6版本
>>> from IPy import IP
>>> ip = IP('192.168.1.20')
>>> ip.reverseNames() #反向解析地址
['20.1.168.192.in-addr.arpa.']
>>> ip.iptype()
'PRIVATE' #ip类型为私网类型
>>> IP('4.4.4.4').iptype()
'PUBLIC' #公网类型
>>> IP('4.4.4.4').int()
67372036 #整型
>>> IP('4.4.4.4').strHex()
'0x4040404' #十六进制
>>> IP('4.4.4.4').strBin() #二进制
'00000100000001000000010000000100'
>>> print(IP(0x4040404)) #将十六进制转换成IP格式
4.4.4.4
3. 网络地址的转换
>>> IP('127.0.0.0/8')
IP('127.0.0.0/8')
>>> IP('127.0.0.0/255.0.0.0')
IP('127.0.0.0/8')
>>> IP('127.0.0.0-127.255.255.255')
IP('127.0.0.0/8')
>>> from IPy import IP
>>> print(IP('192.168.1.0/255.255.255.0',make_net=True))
192.168.1.0/24
>>> print(IP('192.168.1.0').make_net('255.255.255.0'))
192.168.1.0/24
>>>
4. 定制要转换的地址为字符串
输出格式介绍:
wantprefixlen == 0 / None don't return anything 1.2.3.0
wantprefixlen == 1 /prefix 1.2.3.0/24
wantprefixlen == 2 /netmask 1.2.3.0/255.255.255.0
wantprefixlen == 3 -lastip 1.2.3.0-1.2.3.255
使用strNormal方法指定不同wantprefixlen参数来定制输出不同类型的网段:
>>> IP('192.168.1.0/24').strNormal()
'192.168.1.0/24'
>>> 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'
5.多网络计算方法:
通常用来比较两个网段是否存在重叠。
1.判断IP地址和网段是否包含在另一个网段中.
>>> '192.168.1.100' in IP('192.168.1.0/24')
True
>>> IP('192.168.1.0/24') in IP('192.168.0.0/16')
True
2.判断两个网段是否存在重叠。使用overlaps方法。
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
1 #1代表存在重叠
>>> IP('192.168.0.0/23').overlaps('192.168.2.0')
0 #0代表不存在重叠
附上简单的Python程序:根据输入的IP或子网返回网络、 掩码、 广播、反向解析、子网数、 IP类型等信息。
#!/usr/bin/python
#--*-- coding:utf-8 --*--
#filename:show_ip.py
#author:dianel
#2018.3.26 17:20:23
from IPy import IP
def main():
ip_s = raw_input("Please enter IP:")
ip = IP(ip_s)
if ip.len() > 1:
print('net is: %s' %ip.net())
print('netmask: %s' %ip.netmask())
print('broadcast: %s' %ip.broadcast())
print('reverse address: %s' %ip.reverseNames()[0])
print('subnet: %s' %len(ip))
else:
print('reverses address: %s' %ip.reverseNames()[0])
print('version: %s' %ip.version())
print('iptype: %s' %ip.iptype())
print('hexadecimal: %s' %ip.strHex())
if __name__ == '__main__':
main()