gpt4 book ai didi

python - 检查 IP 地址是否在给定范围内

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:46 25 4
gpt4 key购买 nike

我想检查 IP 180.179.77.11 是否位于特定范围内,比如 180.179.0.0 - 180.179.255.255

我编写了一个函数,它将每个 IP 八位字节与其他八位字节进行比较。

def match(mask, IP):
min_ip = mask.split(' - ')[0].split('.')
max_ip = mask.split(' - ')[1].split('.')
ip = IP.split('.')
for i in range(4):
print ip[i] + " < " + min_ip[i] + " or " + ip[i] + " > " + max_ip[i]
print ip[i] < min_ip[i] or ip[i] > max_ip[i]
if ip[i] < min_ip[i] or ip[i] > max_ip[i]:
return False
return True


match("180.179.0.0 - 180.179.255.255", "180.179.77.11")

输出:

180 < 180 or 180 > 180
False
179 < 179 or 179 > 179
False
77 < 0 or 77 > 255 # 77 > 255 is true
True
False

但是,它似乎不能正常工作;在将 77255 进行比较时,问题似乎出现在第三个八位字节中。

我放了一些打印语句来说明问题区域。

最佳答案

您正在比较每个 IP 的 strings 值(按字典顺序比较)而不是 int 值,将它们转换为具有推导式的整数:

min_ip = [int(i) for i in mask.split(' - ')[0].split('.')]
max_ip = [int(i) for i in mask.split(' - ')[1].split('.')]
ip = [int(i) for i in IP.split('.')]

如果您不对mask 中的每个ip 执行两次拆分也是最好的;事先拆分:

s = mask.split(' - ')
min_ip, max_ip = [[int(i) for i in j.split('.')] for j in s]

如果您将 enumerateip 一起使用,您的 for 循环可能会更好:

for ind, val in enumerate(ip):
if val < min_ip[ind] or val > max_ip[ind]:
return False

关于python - 检查 IP 地址是否在给定范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41627920/

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