IPy模块
IPy提供了非常便捷的ip分配和规化能力,下载地址https://pypi.org/project/IPy/#description
ip地址网络的基本处理
>>> from IPy import IP
>>> ip = IP('192.168.1.0/24') #IP类实例化
>>> ip.version() #4:ipv4 6:ipv6
4
>>> ip.len() #ip地址个数。包括了网络地址和广播地址
256
>>> ip.iptype()
'PRIVATE'
>>> ip.int()
3232235776
>>> ip.reverseName()
'1.168.192.in-addr.arpa.'
>>> ip.prefixlen() #就是子网掩码的后缀
24
>>> ip.netmask()
IP('255.255.255.0')
>>> ip.strHex() #十六进制
'0xc0a80100'
>>> ip.strBin() #二进制
'11000000101010000000000100000000'
列出ip地址
for x in ip:
print(x)
print(IP('10.8.1.0').make_net('255.255.255.0')) #10.8.1.0/24根据ip和子网掩码生成网络地址
print(IP('10.8.1.0/24').strNormal(0)) #10.8.1.0 根据wantprefixlen的参数来决定网络地址的形式
print(IP('10.8.1.0/24').strNormal(1)) #10.8.1.0/24
print(IP('10.8.1.0/24').strNormal(2)) #10.8.1.0/255.255.255.0
print(IP('10.8.1.0/24').strNormal(3)) #10.8.1.0-10.8.1.255
多网络计算
对网络地址的判断,是否叠加和包含
in 判断地址或网段的关系
>>> '192.168.1.121' in IP('192.168.1.0/24')
True
>>> IP('192.168.1.0/24') in IP('192.168.0.0/16')
True
判断是否叠加
>>> IP('192.168.1.0/24').overlaps('192.168.2.0/24')
0 #不叠加
>>> IP('192.168.0.0/23').overlaps('192.168.2.0/24')
0
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
1 #叠加
案列脚本
input_ip = input('请输入您的IP地址或网段:')
ips = IP(input_ip) #IP类实例化
if len(ips) > 1:
print('ipv4/ipv6:ipv%s;网络地址:%s;子网掩码:%s;广播地址%s'%(ips.version(), ips.net(), ips.netmask(), ips.broadcast()))
print('ipAddressNumbers:%s'%ips.len())
print('revers:%s'%ips.reverseNames())
else:
print('就是一个ipv%s地址:%s'%(ips.version(),ips.net()))
print('iptype:%s'%ips.iptype())
print('16进制:%s;2进制:%s'%(ips.strHex(), ips.strBin()))