본문 바로가기
파이썬

파이썬의 네트워크에 IP가 있는지 어떻게 확인할 수 있습니까?

by º기록 2020. 9. 24.
반응형

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

 

 

반응형

댓글