实用的IP地址处理模块IPy
1、安装
01、win安装,实用pip工具安装
按住win+R键,输入cmd回车后
输入:python3 -m pip install IPy 会自动下载安装。(python3.5.2)
02、linux安装(2.7版本)
pip install IPy
2、使用方法:
01、显示IP类型
>>> from IPy import IP
>>> IP('10.0.0.0/8').version() #version()显示IP的类型
4
>>> IP('::1').version()
6
02、网段计算输出
>>> ip = IP('192.168.0.0/16')
>>> print(ip.len()) #ip.len()输出指定网段的IP地址个数。
65536
>>> for x in ip: #遍历其网段的IP
print(x)
192.168.0.0
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
192.168.0.6
...
03、格式转换
>>> from IPy import IP
>>> ip = IP('192.168.100.120')
>>> ip.reverseNames() #reverseNames() 反向地址解析。
['120.100.168.192.in-addr.arpa.']
>>> ip.iptype() #iptype 查看IP为公网类型还是私网类型。
'PRIVATE'
>>> IP('114.114.114.114').iptype()
'PUBLIC'
>>> IP('114.114.114.114').int() #int() 转换为整形格式。
1920103026
>>> IP('114.114.114.114').strHex() #strHex() 转换为16进制格式。
'0x72727272'
>>> IP('114.114.114.114').strBin() #strBin() 转换为二进制格式
'01110010011100100111001001110010'
>>> print(IP('0x72727272')) #16进制格式转换为IP格式
114.114.114.114
>>> print(IP(1920103026)) #将整形转换为IP格式
114.114.114.114
04、IP方法也支持网络地址的转换,例如根据IP和掩码产生网段格式
>>> print (IP('192.168.100.0').make_net('255.255.255.0'))
192.168.100.0/24
>>> print (IP('192.168.100.0/255.255.255.0',make_net=True))
192.168.100.0/24
>>> print (IP('192.168.100.0-192.168.100.255',make_net=True))
192.168.100.0/24
05、通过strNormal方法指定不同wantprefixlen参数值以定制不同输出类型的网段,输出类型为字符串
>>> IP('192.168.100.0/24').strNormal(0) #无返回
'192.168.100.0'
>>> IP('192.168.100.0/24').strNormal(1) #prefix格式
'192.168.100.0/24'
>>> IP('192.168.100.0/24').strNormal(2) #decimalnetmask格式
'192.168.100.0/255.255.255.0'
>>> IP('192.168.100.0/24').strNormal(3) #lastIP格式
'192.168.100.0-192.168.100.255'
说明:wantprefixlen的取值说明:
wantprefixlen=0,无返回,如192.168.100.0;
wantprefixlen=1,prefix格式,如192.168.100.0/24;
wantprefixlen=2,decimalnetmask格式,如192.168.100.0/255.255.255.0;
wantprefixlen=3,lastIP格式,如192.168.100.0-192.168.100.255;
3、多网络计算方法详解:
比较两个网段是否存在包含、重叠等关系,比如同网络但不同prefixlen会认为是不相等的网段,如10.0.0.0/16不等于10.0.0.0/24,另外即使具有相同的prefixlen但处于不同的网络地址,同样也视为不相等,如10.0.0.0/16不等于192.0.0.0/16。IPy支持类似于数值型数据的比较,以帮助IP对象进行比较。
01、比较IP大小
IP('10.0.0.0/24') < IP('12.0.0.0/24')
True
02、判断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
03、判断两个网段是否存在重叠(overlaps方法)
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24') #返回1代表重叠
1
>>> IP('192.168.1.0/24').overlaps('192.168.2.0/24') #返回0代表不重叠
0
4、实例:
from IPy import IP
ip_s = input('Please input an IP or net-range : ')
ips = IP(ip_s)
if ips.len()>1:
print('net: %s' % ips.net())
print('netmask: %s '% ips.netmask())
print('brodcast: ' % ips.broadcast())
print('reverse address: %s' %ips.reverseNames()[0])
print('subnet: %s' % ips.len())
else:
print('reverse address: %s' % ips.reverseNames()[0])
print('hexadecimal: %s' % ips.strHex())
print('binary: %s' % ips.strBin())
print('iptype: %s' % ips.iptype())