python的第三方模块IPy可以辅助完成各种IP计算等功能。
安装IPy
pip install IPy
IP地址基本处理
使用IP类判断IP类型
IP('10.0.0.1').version()
IP('10.0.0.0/24').version()
IP('::1').version()
输出4表示IPv4,输出6表示IPv6
输出指定网段的IP个数及清单
ip = IP('10.0.0.0/24')
print ip.len()
for x in ip:
print x
常见的IP类方法
输出反向解析地址格式
ip = IP('192.168.1.50')
ip.reverseName()
输出:50.1.168.192.in-addr.arpa.
输出IP类型
ip = IP('192.168.1.50')
ip.iptype()
输出:PRIVATE(私网),PUBLIC(公网)
转换为整形格式
ip = IP('192.168.1.50')
ip.int()
输出:3232235826
转换为十六进制格式
ip = IP('192.168.1.50')
ip.strHex()
输出:0xc0a80132
转换为二进制格式
ip = IP('192.168.1.50')
ip.strBin()
十六进制转成IP
IP(0xc0a80132)
输出:192.168.1.50
其他格式也可以这样转回去
根据IP与掩码生产网段格式
IP('192.168.1.0').make_net('255.255.255.0')
IP('192.168.1.0').make_net('255.255.255.254')
输出:192.168.1.0/24
192.168.1.0/31
其他形式:
IP('192.168.1.0/255.255.255.0', make_net=True)
IP('192.168.1.0-192.168.1.255', make_net=True)
setNormal方法指定参数值返回不同类型的网段格式
setNormal方法指定wantprefixlen参数值,以返回不同格式的网段,wantprefixlen取值如下:
wantprefixlen=0,无返回,如 192.168.1.0
wantprefixlen=1,prefix格式,如 192.168.1.0/24
wantprefixlen=2,decimalnetmask格式,如 192.168.1.0/255.255.255.0
wantprefixlen=3,lastIP格式,如 192.168.1.0-192.168.1.255
IP('192.168.1.0/24').strNormal(0)
IP('192.168.1.0/24').strNormal(1)
IP('192.168.1.0/24').strNormal(2)
IP('192.168.1.0/24').strNormal(3)
多网络计算方法
判断IP地址和网段是否包含在另一网段中
'192.168.1.10' in IP('192.168.1.0/24')
输出:True(包含),False(不包含)
使用overlaps方法判断是否两个网段有重叠
IP('192.168.1.0/24').overlaps('192.168.2.0/24')
输出:0(不重叠)
IP('192.168.0.0/23').overlaps('192.168.1.0/24')
输出:1(有重叠)
实例
根据输入的IP或网段,返回广播、掩码、反向解析等信息。
from IPy import IP
ip_s = raw_input('Please input an IP or net-range: ')
ips = IP(ip_s)
if len(ips) > 1:
print('net: %s' % ips.net())
print('netmask: %s' % ips.netmask())
print('broadcast: %s' % ips.broadcast())
print('reverse address: %s' % ips.reverseNames()[0])
print('subnet: %s' % len(ips))
else:
print('reverse address: %s' % ips.reverseNames()[0])
print('hexadecimal: %s' % ips.strHex())
print('binary ip: %s' % ips.strBin())
print('iptype: %s' % ips.iptype())