3
IPv4 또는 IPv6 주소가 특정 범위 내에 있는지 확인하기 위해 IPv4 주소를 사용하는 코드를 가져 와서 길게 만든 다음 서브넷의 상한/하한 경계를 변환 한 다음 해당 값 사이에 long 값이 있는지 확인합니다.IPv4 또는 IPv6 주소를 비교할 때 길게 변환
내가 IPv6를 위해 같은 일을 할 수 있기를 좋아하지만, 내가이 작업을 수행 할 수 있도록 파이썬 2.6 표준 라이브러리에서 아무 것도 보지 않았다, 그래서 나는이 쓴 것:
import socket, struct
from array import array
def ip_address_to_long(address):
ip_as_long = None
try:
ip_as_long = socket.ntohl(struct.unpack('L',
socket.inet_pton(socket.AF_INET, address))[0])
except socket.error:
# try IPv6
try:
addr = array('L', struct.unpack('!4L',
socket.inet_pton(socket.AF_INET6, address)))
addr.reverse()
ip_as_long = sum(addr[i] << (i * 32) for i in range(len(addr)))
except socket.error as se:
raise ValueError('Invalid address')
except Exception as e:
print str(e)
return ip_as_long
내 질문을 내가 누락 된 간단한 방법이 있습니까? 이 작업을 수행 할 수있는 표준 라이브러리 호출이 있습니까?
변환 할 표기법을 지정할 수 있습니까? (ipv4의 점으로 구분 된 표기법과 ipv6의 16 진수 표기법을 추측 할 수 있습니까?) – KillianDS
예 : '192.168.1.1'및 'fd00 : dead : dead : dead : beef : fade : f00f : d00d : 1236 ' –