Compare if subnet is in IP range, in Python?

2019-09-05 13:31发布

I have a set of subnets with labeled descriptions in a csv file. I need to assign these descriptions to the Data Probe ranges that these subnets belong to in another csv file.

Given a subnet with an ipaddress 34.0.0.0 and netmask 255.255.0.0,
I want to check if the subnet is in the range 34.163.83.230-34.163.83.230

I have considered creating a range from the subnet's ip and net mask and comparing it to the Data Probe ranges. I haven't been able to find out if this would yield the correct answer.

I cannot use the latest version of Python (this has to work with an application running python 2.7), so the ipaddress module is not an option for me.

1条回答
在下西门庆
2楼-- · 2019-09-05 13:36

The socket module provides inet_aton, which will convert your addresses to bitstrings. You can then convert them to integers using struct.unpack, mask using &, and use integer comparison:

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 
查看更多
登录 后发表回答