본문 바로가기

Language/python

[python] socket 모듈로 내부 IP 확인하기. socket(), getsockname(), gethostname(), 정규표현식

socket 모듈

import socket

in_addr = socket.gethostbyname(socket.gethostname())
print(in_addr)

#socket 모듈: 컴퓨터가 연결된 접속정보를 받아올 때 사용하는 모듈

 

in_addr = socket.gethostbyname(socket.gethostname())
#gethostbyname(): 도메인정보로 ip, 별칭 등 host에 대한 정보를 구하는 함수
#gethostname(): 호스트 이름을 얻어오거나 설정한다.

 

socket.socket()

import socket

in_addr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
in_addr.connect(("www.google.co.kr", 443))
print(in_addr.getsockname()[0])

socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# socket의 socket함수: 소켓 객체 생성
# AF_INET: ipv4 주소 패밀리

#SOCK_STREAM: TCP 스트림 통신

#socket() 함수는 소켓 디스크립터를 반환한다. (-1는 반환 실패)

 

getsockname()

#소켓 자신의 주소를 반환

#튜플타입

#주소 패밀리에 따른 주소와 포트 반환하는 것 같다.

 

 

컴퓨터 외부 IP 알아보기

import requests
import re

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

[결과] 123.456.789.100

#re 모듈: 정규 표현식 모듈

 

out_addr = re.search(r"IP Address: (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", req.text)[1]

#정규표현식 표현. \d는 숫자를 의미
#\d{1,3}은 숫자가 1개 또는 2개 있어야 함.
#search(패턴, 문자열, 플래그), 패턴과 일치하면 전부 찾아서 반환해준다.
#req.text: 홈페이지 코드 다긁어옴

#배열의 첫번째 요소 출력하지 않으면 다음과 같이 출력된다.

매치되는 부분은 'IP Address: 123.456.789.100'이다

#0번째 요소는 'IP Address: 123.456.789.100' 출력