Python - IP 地址

  • 简述

    IP 地址(互联网协议)是一个基本的网络概念,它在网络中提供地址分配能力。Python模块ipaddress广泛用于验证 IP 地址并将其分类为 IPV4 和 IPV6 类型。它还可以用于比较 IP 地址值以及用于操作 IP 地址的 IP 地址算法。
  • 验证 IPV4 地址

    ip_address 函数验证 IPV4 地址。如果值的范围超出 0 到 255,则会引发错误。
    
    print (ipaddress.ip_address(u'192.168.0.255'))
    print (ipaddress.ip_address(u'192.168.0.256'))
    
    当我们运行上述程序时,我们得到以下输出 -
    
    192.168.0.255
    ValueError: u'192.168.0.256' does not appear to be an IPv4 or IPv6 address
    
  • 验证 IPV6 地址

    ip_address 函数验证 IPV6 地址。如果值的范围超出 0 到 ffff,则会引发错误。
    
    print (ipaddress.ip_address(u'FFFF:9999:2:FDE:257:0:2FAE:112D'))
    #invalid IPV6 address
    print (ipaddress.ip_address(u'FFFF:10000:2:FDE:257:0:2FAE:112D'))
    
    当我们运行上述程序时,我们得到以下输出 -
    
    ffff:9999:2:fde:257:0:2fae:112d
    ValueError: u'FFFF:10000:2:FDE:257:0:2FAE:112D' does not appear to be an IPv4 or IPv6 address
    
  • 检查 IP 地址的类型

    我们可以提供各种格式的 IP 地址,模块将能够识别有效的格式。它还将指示它是哪一类 IP 地址。
    
    print type(ipaddress.ip_address(u'192.168.0.255'))
    print type(ipaddress.ip_address(u'2001:db8::'))
    print ipaddress.ip_address(u'192.168.0.255').reverse_pointer
    print ipaddress.ip_network(u'192.168.0.0/28')
    
    当我们运行上述程序时,我们得到以下输出 -
    
    <class 'ipaddress.ipv4address'="">
    <class 'ipaddress.ipv6address'="">
    255.0.168.192.in-addr.arpa
    192.168.0.0/28
    
  • IP 地址比较

    我们可以对 IP 地址进行逻辑比较,以确定它们是否相等。我们还可以比较一个 IP 地址的值是否大于另一个。
    
    print (ipaddress.IPv4Address(u'192.168.0.2') > ipaddress.IPv4Address(u'192.168.0.1'))
    print (ipaddress.IPv4Address(u'192.168.0.2') == ipaddress.IPv4Address(u'192.168.0.1'))
    print (ipaddress.IPv4Address(u'192.168.0.2') != ipaddress.IPv4Address(u'192.168.0.1'))
    
    当我们运行上述程序时,我们得到以下输出 -
    
    True
    False
    True
    
  • IP 地址算术

    我们还可以应用算术运算来操作 IP 地址。我们可以在 IP 地址上加或减整数。如果添加后最后一个八位字节的值超过 255,则前一个八位字节将递增以适应该值。如果额外的值不能被任何前一个八位字节吸收,则会引发值错误。
    
    print (ipaddress.IPv4Address(u'192.168.0.2')+1)
    print (ipaddress.IPv4Address(u'192.168.0.253')-3)
    # Increases the previous octet by value 1.
    print (ipaddress.IPv4Address(u'192.168.10.253')+3)
    # Throws Value error
    print (ipaddress.IPv4Address(u'255.255.255.255')+1)
    
    当我们运行上述程序时,我们得到以下输出 -
    
    192.168.0.3
    192.168.0.250
    192.168.11.0
    AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address