네트워크 프로그래밍이나 시스템 관리 작업을 하다 보면 컴퓨터의 IP 주소를 확인해야 할 때가 있습니다. 이번 글에서는 파이썬을 이용하여 외부 IP와 내부 IP를 확인하는 방법에 대해 알아보겠습니다.
1. 내부 IP 주소 확인
일반적인 내부 IP 확인 코드
import socket
def get_internal_ip():
hostname = socket.gethostname()
internal_ip = socket.gethostbyname(hostname)
return internal_ip
if __name__ == "__main__":
internal_ip = get_internal_ip()
print(f"내부 IP 주소: {internal_ip}")
위 코드에서는 'socket.gethostname()'을 사용하여 컴퓨터의 호스트 이름을 얻고, 'socket.gethostbyname()'을 사용하여 내부 IP 주소를 확인합니다. 이 방법은 로컬 네트워크에 연결되어 있는 경우에 유용합니다.
가상 환경 등을 사용하여 여러 개의 환경이 있을 경우 다른 환경의 IP가 출력되는 문제가 있을 수 있습니다. 그 경우 아래의 코드를 사용할 수 있습니다.
더 정확한 내부 IP 확인 코드
import socket
def get_internal_ip():
try:
# 소켓을 생성하고 외부 사이트(예: Google DNS 서버)에 연결 시도
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80)) # Google DNS 서버 사용
internal_ip = s.getsockname()[0] # 소켓에 바인딩된 IP 주소 가져오기
s.close()
return internal_ip
except OSError as e:
print(f"내부 IP를 가져오는 중 오류가 발생했습니다: {e}")
return None
if __name__ == "__main__":
internal_ip = get_internal_ip()
if internal_ip:
print(f"내부 IP 주소: {internal_ip}")
위 코드에서는 'socket.socket(sockeet.AF_INET, socket.SOCK_DGRAM)' 은 IPv4와 UDP 프로토콜을 사용하여 소켓을 생성합니다. UDP는 연결이 필요 없으므로 실제로 데이터가 전송되지 않더라도 IP를 확인할 수 있습니다.
's.connect(("8.8.8.8", 80))'를 사용하여 외부 사이트에 연결을 시도합니다. 여기서 '8.8.8.8'은 Google의 공개 DNS 서버입니다.
's.getsockname()[0]'은 소켓의 바인딩된 로컷 IP 주소를 가져옵니다.
사용이 끝나면 's.close()'를 호출하여 소켓을 닫습니다.
2. 외부 IP 주소 확인
import requests
def get_external_ip():
try:
response = requests.get('https://api.ipify.org')
external_ip = response.text
return external_ip
except requests.RequestException as e:
print(f"외부 IP 주소를 가져오는 중 오류가 발생했습니다: {e}")
return None
if __name__ == "__main__":
external_ip = get_external_ip()
if external_ip:
print(f"외부 IP 주소: {external_ip}")
위 코드에서는 'requests' 모듈을 사용하여 'https://api.ipify.org' API에 요청을 보내고, 응답으로 받은 텍스트가 외부 IP 주소입니다. 이 방법은 인터넷에 연결된 상태에서 사용할 수 있습니다.
파이썬을 사용하여 컴퓨터의 내부 IP와 외부 IP를 확인하는 방법에 대해 알아보았습니다. 이상입니다.
'Python > ETC' 카테고리의 다른 글
[Python] Zip 압축파일 비밀번호 뚫기 (0) | 2024.08.13 |
---|---|
[Python] 파이썬 컴퓨터의 다양한 정보 확인하기 (psutil) (0) | 2024.08.12 |
[Python] QR코드 생성기 만들기 (qrcode) (0) | 2024.08.11 |
[Python] 파이썬으로 텍스트를 음성으로 변환하기 (gTTS, playsound) (0) | 2024.08.10 |
댓글