您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python中实现ipaddress网络地址的处理

51自学网 2021-10-30 22:29:53
  python
这篇教程Python中实现ipaddress网络地址的处理写得很实用,希望能帮到您。

前言

ipaddress库提供了处理IPv4与IPv6网络地址的类。这些类支持验证,查找网络上的地址和主机,以及其他常见的操作。

本篇,将详细介绍Python中ipaddress库的使用规则。(内容涉及很多计算机网络知识,如果不懂,可以参考书籍《计算机网络》)

地址

一般来说,我们使用ipaddress库是通过ip_address()函数构建一个地址对象。它会返回一个IPv4Address或IPv6Address实例。实例如下:

import ipaddressimport binasciiaddresses = [    '121.63.3.59',    '2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b']for ip in addresses:    address = ipaddress.ip_address(ip)    print("IP地址:", address)    print("IP Version:", address.version)    print("是否是专用地址:", address.is_private)    print("是否是公网地址:", address.is_global)    print("是否是多播地址:", address.is_multicast)    print("是否是环回地址:", address.is_loopback)    print("是否是link-local保留:", address.is_link_local)    print("判断地址是否未指定:", address.is_unspecified)    print("IP地址16进制:", binascii.hexlify(address.packed))

运行之后,效果如下:

效果如下

网络

网络地址通常用一个基本地址和一个掩码表示,掩码指示地址的哪些部分表示网络,哪些部分表示该网络上的地址。可以显式的表示掩码,也可以使用一个前缀长度值来表示,示例如下:

import ipaddressaddresses = [    '192.168.1.0/24',    '2001:0db8:3c4d:0015::/64']for n in addresses:    net = ipaddress.ip_network(n)    print("是否是专用地址:", net.is_private)    print("该网段的广播地址:", net.broadcast_address)    print("IP地址与子网掩码:", net.compressed)    print("掩码以二进制的格式展示:", net.with_netmask)    print("以主机掩码格式展示:", net.with_hostmask)    print("网络中的地址总数:", net.num_addresses)    print()

运行之后,效果如下:

效果如图

涉及IP地址与子网掩码以及广播地址等知识,读者可以参考《计算机网络》。

打印网络地址有多少IP可用

在IPv4的网络地址中,我们一般将其分为A,B,C类,上面我们提供的192.168.1.0是一个C类地址。学过网络的应该一眼就可以看出来其主机地址有254个,基地址为192.168.1.0,而广播地址为192.168.1.255。整体是256个。

因为这是C类地址,数学稍微好点的肯定手到擒来,但是我给你一个IPv6或者IPv4的A类地址,能口算出来多少的恐怕很少吧,而ipaddress库可以直接遍历打印,示例如下:

import ipaddressn = '192.168.1.0/24'net = ipaddress.ip_network(n)for ip in zip(net):    print(ip)

运行之后,效果如下:

效果

这里遍历迭代,列出了所有的地址。如果只列出可用的主机地址把zip(net)改为zip(net.hosts())即可(也就是去除了广播地址与基地址的其他地址)。

当然,如果你只是想确定一个地址是否在网络中,可以直接使用in进行判断。示例如下:

import ipaddressn = '192.168.1.0/24'net = ipaddress.ip_network(n)ip=ipaddress.ip_address('192.168.1.233')if ip in net:    print("在里面")

接口

网络接口表示网络上的一个特定地址,可以表示为一个主机地址和一个网络前缀或网络掩码。示例如下:

import ipaddressaddresses = [    '192.168.1.251/24',    '2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b/64']for ip in addresses:    iface = ipaddress.ip_interface(ip)    print(iface)    print("网络地址:", iface.network)    print("ip地址:", iface.ip)    print("字符串表示形式:", iface.with_prefixlen)    print("二进制表示掩码:", iface.with_netmask)    print("主机掩码表示:", iface.with_hostmask)

运行之后,效果如下:

效果号

到此这篇关于Python中实现ipaddress网络地址的处理的文章就介绍到这了,更多相关Python ipaddress网络地址 内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


Python基于socket实现TCP/IP客户和服务器通信
Python使用mmap实现内存映射文件操作
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。