我想检查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")
输出:
^{pr2}$但是,它似乎不能正常工作;在比较77
和{
我写了一些印刷体来说明问题所在。在
脚本中的错误是-您正在比较字符串,而不是数字。
你可以试试这个:
当您调用匹配函数时,将传入字符串,这些字符串根据八位字节进行拆分。然而,当进行比较时,被比较的八位字节仍然是一个字符串。因此“7”>;“2”表示第三个八位字节。如果将每个八位字节转换为整数:
你会得到预期的反应。
您要比较字符串值(按字典顺序比较),而不是每个IP的
int
值,请将它们转换为具有理解力的整数:最好不要在
^{pr2}$mask
;拆分之前对每个ip执行两次拆分:如果将
^{3}$for
与ip
一起使用,那么for
循环可能会更好:相关问题 更多 >
编程相关推荐