python运维学习之IPy模块

IPy模块的常用方法

from IPy import IP
print(IP('8.8.8.8').version())
>>>4
print(IP('::1').version())
>>>6

ip = IP('192.168.1.0/24')
print(ip.len()) #输出192.168.1.0/24网段的ip个数
for x in ip: #输出192.168.1.0/24网段的所以ip清单
     print(x)

ip = IP('192.168.1.20')
print(ip.reverseNames()) #反向解析地址格式
>>>['20.1.168.192.in-addr.arpa.']

print(ip.iptype()) #查看网络类型,192.168.1.20为私网类型‘PRIVATE’
>>>PRIVATE
ip = IP('124.55.15.4')
print(ip.iptype()) #查看网络类型,124.55.15.4为公网类型
>>>PUBLIC
print(ip.strBin()) #转换成二进制格式
>>>01111100001101110000111100000100

#根据IP与掩码生产网段格式
print(IP('192.168.1.0').make_net('255.255.0.0'))
>>>192.168.0.0/16
print(IP('192.168.1.0/255.255.0.0',make_net=True))
>>>192.168.0.0/16
print(IP('192.168.0.0-192.168.255.255',make_net=True))
>>>192.168.0.0/16

也可以通过srtNormal方法指定不同wantprefixlen参数值以定制不同输出类型的网段。输出类型为字符串

print(IP('192.168.1.0/24').strNormal(0))
>>>192.168.1.0
print(IP('192.168.1.0/24').strNormal(1))
>>>192.168.1.0/24
print(IP('192.168.1.0/24').strNormal(2))
>>>192.168.1.0/255.255.255.0
print(IP('192.168.1.0/24').strNormal(3))
>>>192.168.1.0-192.168.1.255

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地址和网段是否包含于另一个网段中,如下:
print('192.168.1.100' in IP('192.168.1.0/24'))
>>>True
print(IP('192.168.1.0/24') in IP('192.168.0.0/16'))
>>>True

#判断两个网段是否存在重叠,采用IPy提供的overlaps方法
print(IP('192.168.0.0/23').overlaps('192.168.1.0/24'))
>>>1    #返回1代表存在重叠
print(IP('192.168.1.0/24').overlaps('192.168.2.0/24'))
>>>0    #返回0代表不存在重叠

例子

根据输入的IP或子网返回网络、掩码、广播、反向解析、子网数、IP类型等信息

from IPy import IP

ip_s = input('Please input an IP or net-range:') #接收用户输入,参数为IP地址或网段地址
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:	#为单个IP地址
    print('reverse address: %s'% ips.reverseNames()[0]) #输出IP反向解析
    
print('hexadecimal: %s'% ips.strHex()) #输出16进制地址
print('binary ip: %s'% ips.strBin()) #输出二进制地址
print('iptype: %s'% ips.iptype()) #输出地址类型


=================ouput======================
Please input an IP or net-range:192.168.1.0/24
net: 192.168.1.0
netmask: %s 255.255.255.0
broadcast: 192.168.1.255
reverse address: 1.168.192.in-addr.arpa.
subnet: 256
hexadecimal: 0xc0a80100
binary ip: 11000000101010000000000100000000
iptype: PRIVATE

Please input an IP or net-range:222.200.98.147
reverse address: 147.98.200.222.in-addr.arpa.
hexadecimal: 0xdec86293
binary ip: 11011110110010000110001010010011
iptype: PUBLIC

你可能感兴趣的:(python,网络,运维)