02 IPy模块的应用
IPy模块的简介
是一个强大的第三方模块,用过对ipy模块的使用,可以很好的帮助我们高效的完成ip规划工作。
安装方式
pip install IPy
检测方法
>>> import IPy
>>> dir(IPy)
['INT_TYPES', 'IP', 'IPSet', 'IPV6_MAP_MASK', 'IPV6_TEST_MAP', 'IPint', 'IPv4ranges', 'IPv6ranges', 'MAX_IPV4_ADDRESS', 'MAX_IPV6_ADDRESS', 'STR_TYPES', '_BitTable', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_checkNetaddrWorksWithPrefixlen', '_checkNetmask', '_checkPrefix', '_count0Bits', '_count1Bits', '_countFollowingZeros', '_intToBin', '_ipVersionToLen', '_netmaskToPrefixlen', '_parseAddressIPv6', '_prefixlenToNetmask', '_remove_subprefix', 'bisect', 'collections_abc', 'intToIp', 'parseAddress', 'types', 'xrange']
网络基本信息
IPy模块包含ip类,可以处理大部分格式的IPV6和IPV4的网络和地址
ip基本信息
# 识别ip分类
version()
# 获取ip数量
len()
ipv4的演示
from IPy import IP
ip_content="192.168.15.0/24"
ip_result=IP(ip_content).version()
print("{} 的IP类型是:{}".format(ip_content,ip_result))
192.168.15.0/24 的IP类型是:4
给一个网段获取ip数量
from IPy import IP
ip_range = IP('192.168.15.0/27')
print("{}网段有{}个ip".format(ip_range, ip_range.len()))
for i in ip_range:
print(i)
192.168.15.0/27网段有32个ip
>>>
>>> for i in ip_range:
... print(i)
...
192.168.15.0
192.168.15.1
192.168.15.2
192.168.15.3
...
IPy基本操作
反向解析、ip类型、ip转换
反向解析名称
定制ip地址
from IPy import IP
test_ip = IP("115.231.142.3")# 公网
name=test_ip.reverseNames()
print("{}的域名名称是{}".format(test_ip,name))
获取ip类型
>>> from IPy import IP
>>> test_ip.iptype()
'PUBLIC'
ip地址的转换
>>> from IPy import IP
>>> IP('8.8.8.8').int()
134744072
>>> IP('8.8.8.8').strHex()
'0x8080808'
>>> IP('8.8.8.8').strBin()
'00001000000010000000100000001000'
>>> print(IP('192.168.1.0').make_net('255.255.255.0'))
192.168.1.0/24
多网络实践
网段比较
# ip < ip
>>> IP('10.0.0.0/24') < IP('12.0.0.0/24')
True
地址包含
ip in ip
T or F
>>> from IPy import 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
网段重叠
ip.overlaps(ip网段)
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
1 #1代表重叠,0代表不重叠
综合应用
#!/usr/bin/python3.6.7
from IPy import IP
while True:
ip_s = input('请输入一个ip地址或者网段>>>:') # 接收用户输入的ip或者网段
try:
ips = IP(ip_s)
except Exception as e:
print("您输入的ip格式不正确!请重新输入")
continue
else:
if len(ips) > 1:
print('网络地址>>>: %s' % ips.net())
print('网络子网掩码>>>: %s' % ips.netmask())
print('网络广播地址>>>: %s' % ips.broadcast())
print('地址反向解析>>>: %s' % ips.reverseNames()[0])
print('子网个数>>>: %s' % len(ips))
for i in ips:
print("网段内的ip为>>>: %s" % i)
else:
print("输出的16进制为>>:%s" % ips.strHex())
print("输出的2进制为>>:%s" % ips.strBin())
print("网络类型为>>:%s" % ips.iptype())