반응형
IP 주소 (예 : 192.168.0.1)가 주어지면 Python의 네트워크 (예 : 192.168.0.0/24)에 있는지 어떻게 확인합니까?
Python에 IP 주소 조작을위한 일반적인 도구가 있습니까? 호스트 조회, int에 대한 ip 주소, int에 대한 넷 마스크가있는 네트워크 주소 등과 같은 것들? 바라건대 2.5 용 표준 Python 라이브러리에 있습니다.
해결 방법
import socket,struct
def makeMask(n):
"return a mask of n bits as a long integer"
return (2L<<n-1) - 1
def dottedQuadToNum(ip):
"convert decimal dotted quad string to long integer"
return struct.unpack('L',socket.inet_aton(ip))[0]
def networkMask(ip,bits):
"Convert a network address to a long integer"
return dottedQuadToNum(ip) & makeMask(bits)
def addressInNetwork(ip,net):
"Is an address in a network"
return ip & net == net
address = dottedQuadToNum("192.168.1.1")
networka = networkMask("10.0.0.0",24)
networkb = networkMask("192.168.0.0",24)
print (address,networka,networkb)
print addressInNetwork(address,networka)
print addressInNetwork(address,networkb)
결과는 다음과 같습니다.
False
True
문자열을 취하는 단일 함수를 원한다면 다음과 같습니다.
import socket,struct
def addressInNetwork(ip,net):
"Is an address in a network"
ipaddr = struct.unpack('L',socket.inet_aton(ip))[0]
netaddr,bits = net.split('/')
netmask = struct.unpack('L',socket.inet_aton(netaddr))[0] & ((2L<<int(bits)-1) - 1)
return ipaddr & netmask == netmask
참조 페이지 https://stackoverflow.com/questions/819355
반응형
'파이썬' 카테고리의 다른 글
파이썬 중첩 목록 파이썬 (0) | 2020.09.24 |
---|---|
파이썬 Python 2.7 .pyc 디 컴파일 (0) | 2020.09.24 |
파이썬 목록의 개별 요소를 숫자로 곱하는 방법은 무엇입니까? (0) | 2020.09.24 |
파이썬 아무것도 찾을 수 없을 때 예외를 발생시키지 않는 Python 용 list.index () 함수 (0) | 2020.09.23 |
파이썬 단일 CSV 열에 Python 목록 작성 (0) | 2020.09.23 |
댓글