네트워크 프로그래밍이나 시스템 관리 작업을 하다 보면 현재 실행 중인 컴퓨터의 호스트 이름(Hostname)과 IP 주소를 확인해야 하는 경우가 자주 있습니다. Python에서는 기본 모듈인 socket만으로 이 정보를 아주 간단하게 얻을 수 있습니다.
핵심 함수 살펴보기
socket 모듈은 이 작업에 필요한 두 가지 함수를 제공합니다.
- gethostname(): 로컬 머신(현재 실행 중인 컴퓨터)의 표준 호스트 이름을 반환합니다.
- gethostbyname(): 호스트 데이터베이스에서 특정 호스트 이름에 대응하는 호스트 정보(IP 주소)를 조회합니다.
socket.gethostname() socket.gethostbyname()
알고리즘
프로그램의 동작 흐름은 다음 세 단계로 정리할 수 있습니다.
- 1단계: socket 모듈을 임포트(import)합니다.
- 2단계: gethostname() 함수로 로컬 머신의 표준 호스트 이름을 가져옵니다.
- 3단계: gethostbyname() 함수에 호스트 이름을 전달하여 해당하는 IP 주소를 조회합니다.
예제 코드
아래 코드는 예외 처리까지 포함하여 호스트 이름과 IP 주소를 화면에 출력하는 완전한 예제입니다.
# 호스트 이름과 IP 주소 표시하기
import socket
def host_IP():
try:
hname = socket.gethostname()
hip = socket.gethostbyname(hname)
print("Hostname : ", hname)
print("IP Address : ", hip)
except:
print("호스트 이름과 IP 주소를 가져올 수 없습니다")
# 드라이버 코드
host_IP() # 함수 호출실행 결과
프로그램을 실행하면 환경에 따라 다음과 같은 형태로 결과가 출력됩니다.
Hostname : Satyajit-PC IP Address : 192.168.1.66
참고 사항
- gethostbyname()이 반환하는 IP는 일반적으로 사설 IP(내부 네트워크 주소)입니다. 공인(Public) IP를 확인하려면 외부 API를 호출하는 별도의 방법이 필요합니다.
- DNS 설정이나 네트워크 환경에 따라 호스트 이름 조회가 실패할 수 있으므로, 위 예제처럼
try-except블록으로 예외 처리를 해주는 것이 안전합니다. - Python 3.x 최신 버전에서는
socket.gethostbyname_ex()나socket.getaddrinfo()를 활용하면 더 상세한 네트워크 인터페이스 정보를 얻을 수도 있습니다.