Python:在列表推导式中使用多个 IPV4Network 测试地址

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

我正在尝试验证特定的 IP 地址,无论它是否存在于我定义的 ipaddress.IPV4Network 中。 例如,代码:

import ipaddress
ipv = '192.168.255.0'
ans = [str(ip1)in ipaddress.IPv4Network('192.168.0.0/16')]
if ipv in ans:
    print('Present')
else:
    print('Not Present')

返回

True
,因为
ipv='192.168.255.0'
ipaddress.IPv4Network('192.168.0.0/16')

的范围内

False
返回
ipv='192.255.255.0'
,因为它超出了范围。

我想对多个私有 IP 地址进行此检查,例如:

ans = [str(ip1, ip2, ip3) for ip1, ip2, ip3 in (ipaddress.IPv4Network('192.168.0.0/16'), ipaddress.IPv4Network('10.0.0.0/8'), ipaddress.IPV4Network('172.16.0.0/12'))]

这个结构是完全错误的,在Python中是不允许的。 有什么有效的方法可以实现这一点吗?

python python-3.x list list-comprehension
1个回答
0
投票

脚本

import ipaddress
ip_list = ['192.168.0.0', '192.168.0.12', '192.169.255.34']
ip_result = {ip: ipaddress.ip_address(ip) in 
ipaddress.IPv4Network('192.168.0.0/16') for ip in ip_list}
print(ip_result)

输出

{'192.168.0.0': True, '192.168.0.12': True, '192.169.255.34': False}
© www.soinside.com 2019 - 2024. All rights reserved.