Python 的 IPy 库是一个专门用于处理 IP 地址和网络相关操作的第三方库。它提供了丰富的功能,可以帮助用户轻松地进行 IP 地址的解析、格式化、比较和范围计算等操作。以下是 IPy 库的一些主要特性和功能:

  1. IP 地址解析与表示:IPy 允许你将字符串形式的 IP 地址解析为 IP 对象,这些对象可以是 IPv4 或 IPv6 地址。一旦解析,你可以对这些对象执行各种操作。
  2. 网段和网络掩码处理:IPy 可以处理网段(CIDR 块)和网络掩码,允许你创建网络对象,计算广播地址和网络地址等。
  3. IP 地址类型判断:通过 IPy,你可以判断一个 IP 地址是私有的、公有的还是保留的。
  4. IP 地址转换:IPy 提供了多种转换方法,包括将 IP 地址转换为其整数表示、十六进制字符串和二进制字符串。
  5. 网段操作:你可以使用 IPy 来判断两个网段是否重叠,或者一个 IP 地址是否包含在某个网段内。
  6. 输出格式: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)