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 地址。
推荐阅读
- 如何在Python中使用Pickle进行对象序列化()
- 如何在Python中发送电子邮件(详细实现教程)
- 如何在Python中处理文件(代码示例详细教程)
- 如何在Python中生成随机数据(详细代码示例)
- 如何在Python中获取目录的大小(代码示例)
- 如何在Python中为IO任务使用线程(代码示例教程)
- Win8.1系统网络适配器驱动用不了的修好办法
- 雨林木风Win8 64位下将截图工具添加到任务栏的具体步骤
- ntfs.sys Win8.1系统频繁蓝屏显示critical structure corruption