[Python] 현재 시스템의 IP 주소 구하기 Develop Tip

파이썬에서 현재 시스템의 IP 주소를 구할 필요가 있습니다.
고유한 IP 주소(IPv4)를 얻어 사용하고픈 것이지요.

그런데 맥이나 리눅스 등에서 패러랠즈나 VMWare 또는 VirtualBox 등과
Bridge 등을 사용하고 나면...

와 같이 어마 무시하게 많은 NIC이 생깁니다. 물리적인 것도 있고 가상화 인터페이스 등도 함께 존재합니다.
문제는 이렇게 많이 잡히는 IP 주소 중에서 어떤 주소를 나의 주소로 이용할 수 있는가 입니다.

아래와 같이 간단한 함수를 이용합니다.


##########################################################################################
def get_ipaddress():
  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  s.connect(("gmail.com",80))
  r = s.getsockname()[0]
  s.close()
  return r

간단히 설명하면 gmail.com이 웹 포트로 소켓을 열고 그 소켓의 소스IP를
구하는 것입니다.

즉 많은 인터페이스 중에서 실제로 인터넷으로 나가는 네트워크 인터페이스의
주소를 얻어오는 방식입니다.

하나의 단점은 만약 인터넷에 연결되어 있지 않은 사설 네트워크인 경우 문제가 되는데
이 경우에는 HTTP, NTP나 DNS 등의 well-known 서비스가 있으면 그것을 바라보고
유사하게 적용하면 될 것 같습니다.


어느 분께는 도움이 되셨기를...



덧글

  • kkamikoon 2018/06/13 22:33 # 삭제 답글

    덕분에 VMware NIC를 잡는 문제를 해결하였습니다. 감사합니다.!!
  • 지훈현서아빠 2018/06/14 14:08 #

    도움이 되셨다니 저의 보람입니다~ ^^
댓글 입력 영역

구글애드텍스트