2014-03-12 6 views
0

csv 파일에 레이블이 지정된 설명이있는 서브넷 집합이 있습니다. 이 설명을이 서브넷이 다른 CSV 파일에 속하는 데이터 프로브 범위에 할당해야합니다.서브넷이 파이썬에서 IP 범위 내에 있는지 비교해보십시오.


내가 서브넷 내가 서브넷의 IP와 넷 마스크의 범위를 만들고과 비교 고려한 34.163.83.230-34.163.83.230

범위에 있는지 확인하려면, 여기서 ipaddress 34.0.0.0와 넷 마스크 255.255.0.0와 서브넷을 감안할 때 데이터 프로브 범위. 나는 이것이 올바른 대답을 산출 할 수 있는지 알 수 없었다.

최신 파이썬 버전 (파이썬 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

감사합니다. 나는 이것을 필요로하는 비교에 사용했다. 다른 사람들에게 이것이 서브넷을 범위를 검사하는 완전한 해결책이 아니라는 것을 알리고 싶었습니다. –