一、模块相关
下载:pip3 install IPy
描述:
这个模块能够处理IP的网段、网络掩码、广播地址、子网数、IP类型等
二、主要功能演示
1.判断IP类型:ipv4、ipv6
"""
判断IP类型,结果4为ipv4,6为ipv6,参数可以是ip也可以是网段
方法: version()
"""
from IPy import IP
print(IP('10.0.0.1').version()) # 4
print(IP('10.0.0.0/24').version()) # 4
print(IP('2409::1').version()) # 6
2.计算子网个数
"""
计算子网个数,参数同上
方法: len()
"""
from IPy import IP
print(IP('10.0.0.1').len())
print(IP('10.0.0.0/24').len())
print(IP('::1').len())
# 也可以这样写
print(len(IP('10.0.0.1')))
# 你也可以遍历网段的子网
ips = IP('10.0.0.0/31')
for ip in ips:
print(ip)
3.反向解析IP
"""
反向解析IP,参数同上
方法:reverseName()
"""
from IPy import IP
# 反向解析地址格式
print(IP('10.0.0.1').reverseName())
print(IP('10.0.0.1/20').reverseName())
print(IP('2409:0:0:0:0:0:0:0/30').reverseName())
4.ip类型与转格式
"""
ip类型与转格式,参数同上
方法:iptype()、int()、strBin()、strHex()、strDec()
"""
from IPy import IP
# 判断ip类型
print(IP('10.0.0.1').iptype())
# 转格式
ip = IP('10.0.0.1')
print(ip.int()) # 转整型
print(ip.strDec()) # 转十进制,感觉跟int()差不多(*^▽^*)
print(ip.strHex()) # 转十六进制
print(ip.strBin()) # 转二进制
# 也可以将数值串转回IP
print(IP(0xc0a80132)) # 转回IP
5.生产网段
"""
根据IP与掩码生产网段格式和选择输出不同格式网段
方法:make_net()、strNormal()
"""
from IPy import IP
# 根据IP与掩码生产网段格式
print(IP('192.168.1.0').make_net('255.255.255.0'))
# 指定参数值返回不同类型的网段格式,0-3
print(IP('192.168.1.0/24').strNormal(0))
print(IP('192.168.1.0/24').strNormal(1))
print(IP('192.168.1.0/24').strNormal(2))
print(IP('192.168.1.0/24').strNormal(3))
6.判断IP是否在该网段、有重叠
"""
判断IP地址是否在该网段
"""
from IPy import IP
# 判断IP地址和网段是否包含在另一网段中
print('192.168.1.10' in IP('192.168.1.0/24'))
print(IP('192.168.1.10') in IP('192.168.1.0/24'))
print('2408:8774:1:16::B45F:E504' in IP('2408:8774::/32'))
# 判断是否两个网段有重叠
print(IP('192.168.1.0/24').overlaps('192.168.2.0/24'))
7.小练习
from IPy import IP
ips = IP("192.168.1.0/24")
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]) #输出IP反向地址解析
print('hexadecimal: %s' % ips.strHex()) # ip转为16进制
print('binary ip: %s' % ips.strBin()) # ip转为2进制
print('iptype:%s' % ips.iptype()) # 输出地址类型
print()
print(len(ips))
print(ips[-1])
print(IP("192.168.1.0") in IP("192.168.1.0/24"))