如何使用ipaddress模块在Python中操作IP地址()

Python如何操作IP地址?使用 ipaddress 标准 Python 库来操作 IPv4 和 IPv6 地址、网络、子网等。
Python ipaddress如何操作IP地址?在本教程中,您将学习如何使用ipaddress模块使用IP地址在Python中,网络工程师和开发网络相关软件的人经常使用此模块,它提供了方便的函数和类,处理各种任务相关的IP地址,包括检查两个主机是否属于同一子网,迭代一个子网的所有主机,检索特定子网的广播地址,等等。
相关:如何在 Python 中使用 Scapy 制作网络扫描仪。
Python ipaddress操作IP地址示例介绍 - 我们不需要安装任何东西,因为这个模块是内置的,它是在 Python 3.3 中引入的,所以如果你有 Python 3.3+(我相信你有),你很高兴!
让我们从IPv4Address类开始:

import ipaddress # initialize an IPv4 Address ip = ipaddress.IPv4Address("192.168.1.1")

现在,这个ip对象代表单个 IP 地址,我们可以检查它是否是全局 IP 地址(非私有)以及它是否是本地链接:
# print True if the IP address is global print("Is global:", ip.is_global)# print Ture if the IP address is Link-local print("Is link-local:", ip.is_link_local)

输出:
Is global: False Is link-local: False

你也可以使用ip.is_reserved和ip.is_multicast分别检查该 IP 地址是否在保留 IP 和多播地址列表中。
你可以对 IP 地址进行加减运算:
# next ip address print(ip + 1)# previous ip address print(ip - 1)

Python ipaddress如何操作IP地址?你猜对了,IP加1表示下一个IP地址,减1表示上一个IP地址,输出如下:
192.168.1.2 192.168.1.0

由于我无法涵盖所有??可用的方法,因此编写dir(ip)以发现你可以使用的各种方法和属性。
现在你对IPv4Address对象有了基本的了解,让我们深入处理IPv4Network对象:
# initialize an IPv4 Network network = ipaddress.IPv4Network("192.168.1.0/24")

现在这个网络对象代表一个 IPv4 网络,/24 的东西是CIDR 表示法,它表示IP 地址总共32位的前导24位用于标识地址的网络部分,这意味着在这种情况下,“ 192.168.1.x"是网络部分(3x8 = 24位),只有最后一个八位字节“xxx0”是主机部分。
你可以检索此网络的网络掩码:
# get the network mask print("Network mask:", network.netmask)

输出:
Network mask: 255.255.255.0

Python ipaddress操作IP地址示例:网络掩码只是用于表达和表示地址的网络部分的另一种格式(可能较旧),在这种情况下,255.255.255.0表示前24位填充为1(255是11111111二进制)表示地址的网络部分(与/24表示法相同)。
以下是获取网络广播地址的方法:
# get the broadcast address print("Broadcast address:", network.broadcast_address)

输出:
Broadcast address: 192.168.1.255

复制打印属于这个网络的主机数:
# print the number of IP addresses under this network print("Number of hosts under", str(network), ":", network.num_addresses)

输出:
Number of hosts under 192.168.1.0/24 : 256

该网络下共有256 个主机(包括子网和广播地址)可用,以下是你可以迭代所有主机的方法:
# iterate over all the hosts under this network print("Hosts under", str(network), ":") for host in network.hosts(): print(host)

这将打印范围从192.168.1.1到192.168.1.254 的所有有效主机 IP 地址。
你还可以获取此网络的子网:
# iterate over the subnets of this network print("Subnets:") for subnet in network.subnets(prefixlen_diff=2): print(subnet)

输出:
Subnets: 192.168.1.0/26 192.168.1.64/26 192.168.1.128/26 192.168.1.192/26

Python ipaddress如何操作IP地址?network.subnets()方法返回加入使当前子网作为IPv4Network对象列表的子网,prefixlen_diff参数是一个整数,表示前缀长度应增加的量,我将其设置为2,这样我就可以获得/26子网。
你还可以获得超网:
# get the supernet of this network print("Supernet:", network.supernet(prefixlen_diff=1))

这将返回包含当前网络的超网,这是输出:
Supernet: 192.168.0.0/23

Python ipaddress操作IP地址示例 - 复制最后,你可以测试一个网络是否与另一个网络重叠:
# tell if this network is under (or overlaps) 192.168.0.0/16 print("Overlaps 192.168.0.0/16:", network.overlaps(ipaddress.IPv4Network("192.168.0.0/16")))

输出:
Overlaps 192.168.0.0/16: True

它返回True,因为192.168.1.1/24子网在192.168.0.0/16网络下。
【如何使用ipaddress模块在Python中操作IP地址()】Python如何操作IP地址?好的,我们已经完成了本教程,你可以通过查看他们的官方文档来探索这个模块,以获取更多 IPv4 的函数和类以及对于希望开发网络应用程序的网络工程师和 Python 程序员来说非常方便的 IPv6 地址。

    推荐阅读