Python IP 验证给出不正确的结果

问题描述 投票:0回答:1

我正在尝试使用

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

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

但是当我尝试在Linux中使用它时,出现以下错误;

localhost:~# ip addr flush dev eth0
localhost:~# ip addr add 103.162.136.145/255.255.255.252 dev ethd localhost:~# ip link set ethO up
localhost:~# ip route replace default via 103.162.136.144
ip: RTNETLINK answers: Invalid argument

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

103.162.136.145
103.162.136.146

我在验证中做错了什么?

编辑 -

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

python linux ip ip-address
1个回答
2
投票

正如评论中提到的,这个库似乎返回了网络地址和广播地址,这是您没有想到的两个附加地址。然后你问:

看起来确实如此,但为什么要这样做呢?

这是一个很好的问题,但对于图书馆的作者来说。挖掘他们的想法的一种方法是阅读他们友好的手册。

您没有指定python版本,但我找到了python3的版本:

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

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

那么,不要迭代这个网络对象 - 使用返回可用地址的方法?

我不是Python程序员,但也许是这样的?

for ip in network.hosts():
    print(ip)
© www.soinside.com 2019 - 2024. All rights reserved.