在Python中比较子网是否在IP范围内?

时间:2014-03-12 20:19:22

标签: python-2.7 comparison ip-address subnet netmask

我在csv文件中有一组带有标记说明的子网。我需要将这些描述分配给这些子网属于另一个csv文件的数据探测范围。

给定具有ipaddress 34.0.0.0和网络掩码255.255.0.0的子网,
我想检查子网是否在34.163.83.230-34.163.83.230

范围内

我考虑过从子网的ip和net mask创建一个范围,并将其与Data Probe范围进行比较。我还没有发现这是否会产生正确答案。

我无法使用最新版本的Python(这必须与运行python 2.7的应用程序一起使用),因此ipaddress模块不适合我。

1 个答案:

答案 0 :(得分:1)

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