티스토리 뷰

728x90

1. 내부 인터페이스 IP 확인하기

1) socket.gethostbyname()

python을 통해 내 PC의 내부 IP 확인하는 방법으로 대부분의 검색 결과에서 아래와 같이 안내하고 있습니다.

 

하지만 가상 인터페이스 등으로 인터페이스가 여러개인 환경에서는 다른 인터페이스의 IP가 나올 수 있습니다.

import socket

print(socket.gethostbyname(socket.gethostname()))
==========
Output: 192.168.68.2

 

2) socket.getsockname()

이 방법은 socket으로 외부 페이지에 접근하고, 그 접근한 소켓의 정보를 가져오는 방법입니다.

따라서, 실제로 인터넷에 연결된 인터페이스의 IP를 알 수 있습니다.

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("pwnbit.kr", 443))
print(sock.getsockname()[0])
==========
Output: 192.168.68.2

 

728x90

2. 외부 IP 확인하기

1) requests

이 방법은 IP를 알려주는 사이트를 알아야하고, 언제 사이트가 없어질지도 모르는 문제가 있습니다.

import requests

print(requests.get("http://ip.jsontest.com").json()['ip'])
==========
Output: xxx.xxx.xxx.xxx

 

2) re, requests

외우기 쉬운 ipconfig.kr에서 알려주는 공인 IP를 이용한 방법으로 사이트는 외우기 쉽지만,

정규표현식이 익숙하지 않다면 좀 더 복잡한 방법인 것 같습니다.

import request
import re

req = requests.get("http://ipconfig.kr")
print(re.search(r'IP Address : (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', req.text)[1])
==========
Output: xxx.xxx.xxx.xxx

 

 

3. 내부/외부 IP 한 번에 확인하기

가장 쉽고 정확한 방법으로 짠다면 아래와 같은 코드가 될 것 같습니다.

import socket
import requests
import re

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("pwnbit.kr", 443))
print("내부 IP: ", sock.getsockname()[0])

req = requests.get("http://ipconfig.kr")
print("외부 IP: ", re.search(r'IP Address : (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', req.text)[1])
==========
Output:
내부 IP: 192.168.68.2
외부 IP: xxx.xxx.xxx.xxx

 

728x90
TAG
댓글
댓글쓰기 폼