ipaddress
模块:网络地址和协议的表示和处理ipaddress
模块Python的ipaddress
模块是从Python 3.3开始引入的标准库。它提供了一组类和函数,用于处理IP地址和网络协议。
要使用ipaddress
模块,首先需要导入它:
import ipaddress
ipaddress
模块提供了两个主要的类来表示IP地址:IPv4Address
和IPv6Address
,分别用于IPv4和IPv6地址。
要表示一个IPv4地址,可以使用IPv4Address
类。下面是一个示例:
from ipaddress import IPv4Address
ip = IPv4Address('192.168.0.1')
print(ip)
运行结果:
192.168.0.1
要表示一个IPv6地址,可以使用IPv6Address
类。下面是一个示例:
from ipaddress import IPv6Address
ip = IPv6Address('2001:0db8:85a3:0000:0000:8a2e:0370:7334')
print(ip)
运行结果:
2001:db8:85a3::8a2e:370:7334
IP地址对象有一些有用的属性可以提供关于该地址的信息。下面是一些常用的属性和使用示例:
address
:返回IP地址的字符串表示。version
:返回IPv4或IPv6的版本号。is_private
:返回IP地址是否为私有地址。is_loopback
:返回IP地址是否为回环地址。is_link_local
:返回IP地址是否为链路本地地址。is_multicast
:返回IP地址是否为多播地址。下面是一个示例:
from ipaddress import IPv4Address, IPv6Address
ip4 = IPv4Address('192.168.0.1')
ip6 = IPv6Address('2001:db8:85a3::8a2e:370:7334')
print(ip4.address)
print(ip6.address)
print(ip4.version)
print(ip6.version)
print(ip4.is_private)
print(ip6.is_private)
print(ip4.is_loopback)
print(ip6.is_loopback)
print(ip4.is_link_local)
print(ip6.is_link_local)
print(ip4.is_multicast)
print(ip6.is_multicast)
运行结果:
192.168.0.1
2001:db8:85a3::8a2e:370:7334
4
6
True
False
False
False
False
False
False
False
IP地址对象可以比较大小。这在需要对IP地址进行排序或查找时非常有用。
from ipaddress import IPv4Address
ip1 = IPv4Address('192.168.0.1')
ip2 = IPv4Address('192.168.0.2')
print(ip1 < ip2)
print(ip1 == ip2)
print(ip1 > ip2)
运行结果:
True
False
False
除了IP地址之外,网络和子网也是计算机网络中的重要概念。ipaddress
模块提供了一种方便的方法来表示和操作网络和子网。
要表示一个网络,可以使用IPv4Network
和IPv6Network
类。下面是一个示例:
from ipaddress import IPv4Network, IPv6Network
network4 = IPv4Network('192.168.0.0/24')
network6 = IPv6Network('2001:db8:85a3::/64')
print(network4)
print(network6)
运行结果:
192.168.0.0/24
2001:db8:85a3::/64
网络对象有一些有用的属性可以提供关于该网络的信息。下面是一些常用的属性和使用示例:
network_address
:返回网络地址。broadcast_address
:返回广播地址。netmask
:返回子网掩码。with_netmask
:返回网络地址和子网掩码的元组。with_hostmask
:返回网络地址和主机掩码的元组。下面是一个示例:
from ipaddress import IPv4Network
network = IPv4Network('192.168.0.0/24')
print(network.network_address)
print(network.broadcast_address)
print(network.netmask)
print(network.with_netmask)
print(network.with_hostmask)
运行结果:
192.168.0.0
192.168.0.255
255.255.255.0
('192.168.0.0', '255.255.255.0')
('192.168.0.0', '0.0.0.255')
ipaddress
模块还提供了一些方法用于进行子网划分。下面是一些常用的方法和使用示例:
subnets()
:根据指定的子网掩码位数将网络划分为子网。supernet(prefixlen_diff=None)
:返回包含当前网络的最小超网。subnet(new_prefix):
:将网络划分为新的子网。下面是一个示例:
from ipaddress import IPv4Network
network = IPv4Network('192.168.0.0/24')
subnets = list(network.subnets(prefixlen_diff=2))
print(subnets)
supernet = network.supernet()
print(supernet)
subnet = network.subnet(new_prefix=26)
print(subnet)
运行结果:
[IPv4Network('192.168.0.0/26'), IPv4Network('192.168.0.64/26'), IPv4Network('192.168.0.128/26'), IPv4Network('192.168.0.192/26')]
192.168.0.0/23
192.168.0.0/26
ipaddress
模块还提供了一些方法用于地址转换和验证。下面将介绍一些常用的方法和使用示例。
from ipaddress import IPv4Address
ip = IPv4Address('192.168.0.1')
ip_int = int(ip)
print(ip_int)
运行结果:
3232235521