gpt4 book ai didi

python - 如何检查 IP 地址是否在 python 网络列表中的任何网络中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:23:11 28 4
gpt4 key购买 nike

因此,对于单一搜索:

from netaddr import IPAddress, IPNetwork
if IPAddress( address ) in IPNetwork( network ):
print( 'in' )

但是如果给你一个网络列表怎么办?是否可以不使用 for 循环来做到这一点?执行此任务的 pythonic 方法是什么? ...最好可读,然后更快。

from netaddr import IPAddress, IPNetwork
networks = [
'1.0.0.0\8',
'2.0.0.0\8',
# ...
'21.22.14.0\24' # something random
]

for network in networks:
if IPAddress( address ) in IPNetwork( network ):
print( 'in' )
break

编辑:对于任何感兴趣的人,我采用了给定的网络列表,并将每个网络扩展到其地址列表。然后我拿走了那个地址列表并从中制作了一组。鉴于集合具有 O(1) 查找,我认为它会有所帮助。

完成 for 循环(无设置)所需的时间为 24 分钟。
使用时间:

address_set = set()

for network in networks:
for address in IPNetwork( network ).subnet( 32 ):
non_CIDR_address = str( address ).split( '/' )[ 0 ]
address_set.add( non_CIDR_address )

if query_address in address_set:
print( 'in' )
if address in address_set:
print( 'in' )

...是 2 分 37 秒。

开始吧!

注意:扩展网络可能会占用大量内存。

最佳答案

if any(IPAddress(address) in IPNetwork(network) for network in networks):
...

可以通过仅实例化一次 IPAddress 并将 IPNetwork 存储在列表中来完成优化。

关于python - 如何检查 IP 地址是否在 python 网络列表中的任何网络中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30085594/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com