2014-03-12 38 views
0

我有一组在csv文件中标记说明的子网。我需要将这些描述分配给这些子网属于另一个csv文件的数据探测器范围。比较子网是否在IP范围内,在Python中?

给定一个子网的ip地址34.0.0.0和网络掩码255.255.0.0
我要检查如果子网是34.163.83.230-34.163.83.230

我已经考虑创建一个从子网的IP地址和子网掩码范围并将其与范围数据探测器范围。我一直无法确定这是否会产生正确的答案。

我不能使用最新版本的Python(这必须与运行python 2.7的应用程序一起工作),所以ipaddress模块不适合我。

回答

2

socket模块提供inet_aton,它会将您的地址转换为位串。然后,您可以将其转换为使用&使用struct.unpack,面具整数,并使用整数比较:

from socket import inet_aton 
from struct import unpack 

def atol(a): 
    return unpack(">L", inet_aton(a))[0] 

addr = atol("30.44.230.0") 
mask = atol("255.255.0.0") 
lo = atol("32.44.230.0") 
hi = atol("32.44.230.255") 
prefix = addr & mask 

print lo <= prefix <= hi 
+0

感谢。我用这个来比较我需要的。我只是想让其他人知道这不是将子网检查到范围的完整解决方案。 –