2014-03-12 89 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

感謝。我用這個來比較我需要的。我只是想讓其他人知道這不是將子網檢查到範圍的完整解決方案。 –