我正在try 使用ipaddress库验证IP、网关和子网掩码输入,但是当我实际try 使用经过验证的网络时,我得到了无效的结果,这使我认为验证是不正确的.

network = ipaddress.ip_network("103.162.136.145/255.255.255.252", strict=False)
for ip in ipaddress.ip_network(network):
    print(ip)

下面列出了这些有效的IP

103.162.136.144
103.162.136.145
103.162.136.146
103.162.136.147

然而,当我try 在Linux中使用它时,我得到了以下错误;

enter image description here

显示的正确范围实际上应该是

103.162.136.145
103.162.136.146

我在验证中做错了什么?

Edit - 103.162.136.145/255.255.255.252是IP/子网掩码,103.162.136.144是网关

推荐答案

正如在 comments 中提到的,这个库似乎返回了网络地址和广播地址,这是你没有想到的两个额外的地址.然后你会问:

看起来确实是这样,但它为什么要这么做?

这是一个很好的问题,但对于图书馆的作者来说.向他们请教的一种方法是阅读他们友好的手册.

您没有指定python3的版本,但我发现了以下内容:

可以迭代网络对象以列出属于网络的所有地址.对于迭代,将返回所有主机,包括不可用的主机(对于可用的主机,使用hosts()方法)

https://docs.python.org/3/library/ipaddress.html#iteration

那么,与其遍历这个网络对象,不如使用一个返回可用地址的方法?

我不是一名Python程序员,但可能是这样的?

for ip in network.hosts():
    print(ip)

Python相关问答推荐

三个给定的坐标可以是矩形的点吗

海运图:调整行和列标签

管道冻结和管道卸载

Julia CSV for Python中的等效性Pandas index_col参数

使用密钥字典重新配置嵌套字典密钥名

让函数调用方程

需要帮助重新调整python fill_between与数据点

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

Python全局变量递归得到不同的结果

基于Scipy插值法的三次样条系数

如何在海上配对图中使某些标记周围的黑色边框

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

如何在Python中使用Iscolc迭代器实现观察者模式?

语法错误:文档. evaluate:表达式不是合法表达式

将CSS链接到HTML文件的问题

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

如何将返回引用的函数与pybind11绑定?

如何使用pytest在traceback中找到特定的异常

有什么方法可以在不对多索引DataFrame的列进行排序的情况下避免词法排序警告吗?