Python 的 IPy 库是一个专门用于处理 IP 地址和网络相关操作的第三方库。它提供了丰富的功能,可以帮助用户轻松地进行 IP 地址的解析、格式化、比较和范围计算等操作。以下是 IPy 库的一些主要特性和功能:
- IP 地址解析与表示:IPy 允许你将字符串形式的 IP 地址解析为 IP 对象,这些对象可以是 IPv4 或 IPv6 地址。一旦解析,你可以对这些对象执行各种操作。
- 网段和网络掩码处理:IPy 可以处理网段(CIDR 块)和网络掩码,允许你创建网络对象,计算广播地址和网络地址等。
- IP 地址类型判断:通过 IPy,你可以判断一个 IP 地址是私有的、公有的还是保留的。
- IP 地址转换:IPy 提供了多种转换方法,包括将 IP 地址转换为其整数表示、十六进制字符串和二进制字符串。
- 网段操作:你可以使用 IPy 来判断两个网段是否重叠,或者一个 IP 地址是否包含在某个网段内。
- 输出格式:IPy 允许你以不同的格式输出 IP 地址和网段,例如网络标识、前缀表示、十进制网络掩码格式或最后 IP 地址格式。
- 一 使用IPy中的IP方法迅速格式化
(1)查看地址是IPv4还是IPv6
from IPy import *
if __name__ == "__main__":
print(IP('10.10.0.0/16').version())
print(IP('::1').version())
(2)格式化输出IPV4和IPV6的地址
from IPy import *
if __name__ == "__main__":
print(IP('127.0.0.1'))
print(IP('192'))
print(IP(0x8f000011))
print(IP('1080:0:0:0:8:800:200C:417A'))
(3)子网掩码及网段前缀转换
from IPy import *
if __name__ == "__main__":
print(IP('192.0.0.0/8'))
print(IP('192.0.0.0/255.0.0.0'))
print(IP('1.0.0.0-1.255.255.255'))
(4)已知IP的子网掩码,求出该地址的网段
from IPy import *
if __name__ == "__main__":
print(IP('127.0.0.1/255.0.0.0',make_net=True))
print(IP('12.1.0.1').make_net('255.255.255.224'))
(5)得到IP的掩码以及广播地址
from IPy import *
if __name__ == "__main__":
ip=IP('192.168.1.0/24')
print(ip.net()) # 输出网络地址 192.168.1.0
print(ip.netmask()) # 输出掩码地址 255.255.255.0
print(ip.broadcast()) # 输出广播地址 192.168.1.255
- 二 使用IPy中的IP方法迅速格式化
(1)IP地址转换的高级用法
from IPy import *
if __name__ == "__main__":
ip_address=IP('192.168.12.4')
print(ip_address.iptype()) #解析地址的"公网,私网属性" 192.168.100.0为私有网段
print(ip_address.int()) # 把192.168.12.4换成整数
print(ip_address.strHex()) # 把192.168.12.4 转成成16进制
print(ip_address.strBin()) # 把192.168.12.4 转成成二进制
(2)IP地址转换成字符串
可以通过strNomal方法指定不同的wantprefixlen参数定制不同输出类型的网段输出为字符串。
wantprefixlen = 0 ,无返回的意思
wantprefixlen = 1 ,返回前缀的类型
wantprefixlen = 2 ,返回网段/子网掩码的类型
wantprefixlen = 3 ,返回IP地址范围的类型
from IPy import *
if __name__ == "__main__":
print(IP('192.0.0.0/24').strNormal())
print(IP('192.0.0.0/24').strNormal(0))
print(IP('192.0.0.0/24').strNormal(1))
print(IP('192.0.0.0/24').strNormal(2))
print(IP('192.0.0.0/24').strNormal(3))
(3)IP处理IP地址段的包含关系
涉及处理两个网段是否包含的关系,IPy中的IP方法也提供了这个功能,会返回一个布尔值告诉我们是否包含:
from IPy import *
if __name__ == "__main__":
print(IP('192.168.1.0/24') < IP('192.168.2.0/24')) #判断IP网段大小
print(IP('192.168.1.1/24') in IP('192.168.1.0/24')) # 判断一个IP网段是否包含于另一个IP网段
print(('192.168.1.1' in IP('192.168.1.0/24'))) # 判断一个IP地址是否包含于另一个IP网段
(4)得到该IP网段下所有的IP
from IPy import *
if __name__ == "__main__":
ip=IP('192.168.0.0/28')
print(ip.len())
for x in ip:
print(x)