상세 컨텐츠

본문 제목

[파이썬] socket 모듈에 대해 알아보자!(getaddrinfo, getfqdn, gethostbyname, gethostname , getprotobyname, getservbyname)

프로그래밍 언어/파이썬

by 해공학(해킹을 공부하는 학생) 2023. 11. 5. 21:14

본문

안녕하세요 오늘은 파이썬 소켓 모듈의 20가지 명령어들에 대해 알아보겠습니다.

 

socket 모듈이란?

제가 예전에 올렸었는데 보고 싶으신 분들은 아래 링크 들어가서 봐주세요!

https://halinstudy.tistory.com/92

 

여기서 간단히 설명하자면, 서로 컴퓨터가 통신할때 무조건 필요로 하는것이 소켓입니다.

TCP/UDP 통신을 하기 위해서든 무슨 통신을  하든 꼭 필요한것이 소켓 입니다.

 

 

소켓 모듈 공부 시작

 

1. getaddrinfo

getaddrinfo는 아이피 주소랑 포트를 주면 그곳에 접속하기 위한 소켓을 만들때 도움이 되는

정보를 줍니다.

socket.getaddrinfo의 기본 형태

위 사진은 getaddrinfo의 기본 형태 입니다. 저것들을 하나하나 알아보겠습니다.

 

아이피 주소 : 저희가 알고 싶은 곳의 아이피 주소를 적으면 됩니다.

--  포트 : 그것이 연결된 포트번호를 적으면 됩니다.

--  family : 주소 패밀리를 적으면 되는데, 주소 패밀리는 IPv4, IPv6같은것을 의미한다. 소켓은 이것들을 AF_INET같은게 있음

--  type:  소켓의 타입을 적으면됨, 소켓의 타입은 어떤 통신을 허용할건지를 나타내는 SOCK_STREAM같은걸 나타내면 된다

--  proto  : 프로토콜을 나타내면됨

-- flags :  여러 가지 옵션을 정할수 있다!

 

이렇게 해서 naver.com에 출력 결과를 받아보면

이런식으로 나오는데 첫번째는 IPv4라는 뜻, 첫번째 0은 소켓의 유형을 나타내고,

두번째 0은 프로토콜을 나타낸다.

 

한가지를 더 알자면, cannon name은 호스트의 대소문자 구별 없는 주소를 의미한다.

 

2. getfqdn

getfqdn은 도메인 주소의 정규화된 아이피 주소를 반환하는 함수 입니다.

정규화된 아이피 주소란 서버의 주소라고도 할수있습니다.

 

우리나라 3개의 방송사의 정규화된 아이피 주소를 받아보겠습니다.

이런식으로 변수로 만들고 출력을 하면,

이런식의 출력 결과과 나옵니다. 이게 무슨 뜻 이냐면, 출력결과는 서버의 주소를 의미하는것 입니다.

그러면 kbs는 아마존의 서버를 사용하고, sbs는 ..... 잘 모르겠고, mbc는 자체 서버를 사용하는것을 

알수있습니다!!(sbs는 모르겠어여)

 

3. gethostbyname

gethostbyname은 함수 괄호뒤에 도메인을 주면, 아이피 주소를 줍니다.

이렇게 하면 imbc.com의 아이피 주소를 반환 합니다.

이런식으로 그냥 도메인을 적으면 아이피주소로 반환하는 함수 입니다.

(그냥 아아피주소를 적으면 똑같이 반환함)

 

4. gethostname

gethostname은 자기 hostname을 반환합니다(자신의 컴퓨터 이름을 반환한다)

출력결과는 다음과 같습니다,

저의 hostname은 DESKTOP-5SFNRCT이네요

 

5. getprotobyname

getprotobyname은 함수 괄호뒤에 프로토콜을 쓰면 그 프로토콜이 가진 번호를 반환해 줍니다.

그리고 이것을 이용해서 소켓모듈을 초기화 할때 사용할수 있습니다.

이런식으로 하면 출력 결과는

6이 나오는것을 볼수 있습니다. 그리고 tcp말고도 udp, icmp 같은 것들도 넣어 볼수있겠네요

 

6. getservbyname

getservbyport는 인자에 서비스와 프로토콜을 적으면 그 서비스가 사용하는

포트 번호를 알려주는 역활을 합니다.

이런식으로 서비스와 프로토콜을 적으면 그 서비스가 사용하는 포트번호를 알려줍니다.

이렇게 하면 출력결과가 80으로 나옵니다.

 

관련글 더보기