python socket이란?
Socket(소켓)이란 간단히 설명하면 네트워크에서 패킷을 주고 받을 때 각 end 단에서 application으로 넘어가기전에 받아는 버퍼와 같은 것이다.
서버의 경우 서버에 들어오기 전에 Load balancer가 소켓으로 동작한다고 볼 수 있다. 그리고 클라이언트 측에서는 웹브라우저에 들어가기전에 버퍼역할을 하는 것이 소켓이라고 할 수 있다.
AF_INET, SOCK_STREAM 의미
AF_INET, SOCK_STREAM 는 socket을 설정할 때 특성 값이다.
AF_INET 는 해당 소켓은 IP version 4 용으로 사용하겠다는 의미이다.
SOCK_STREAM 는 해당 소켓에 TCP 패킷을 받겠다는 의미이다.
간단하게 텍스트 주고 받는 서버 만들기
코드 - 서버측>
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(),8080))
s.listen(10)
while True:
c_socket, client_ip = s.accept()
print(f"{client_ip} 가 연결되었습니다.")
print("Client Socket info : ", c_socket)
c_socket.send(bytes("Hi","utf-8"))
코드 - 클라이언트측>>
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(),8080))
message = s.recv(1024).decode("utf-8")
print(message)
결과 - 서버측>>
('192.168.0.111', 1075) 가 연결되었습니다.
Client Socket info : <socket.socket fd=688, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('192.168.0.111', 8080), raddr=('192.168.0.111', 1075)>
결과 - 클라이언트측>>
Hi
주석 - 서버측>>
import socket
socket은 내장 함수로 별도의 설치가 필요 없다.
s.bind((socket.gethostname(),8080))
bind는 서버측에 8080포트에 연결하겠다는 뜻이다. gethostname은 내 컴퓨터 내에서 연결하겠다는 의미이다. 다른 값으로 localhost, 127.0.0.1 로 사용할 수 있다. 그리고 bind 를 (()) 두 번의 괄호를 사용한 이유는 bind 가 튜플로 값을 받기 때문이다.
c_socket, client_ip = s.accept()
클라이언트에서 연결요청을 보내면 accept로 받고 return 값으로 소켓정보와 ip정보가 나온다.
c_socket.send(bytes("Hi","utf-8"))
메세지를 보낼땐 바이트로 보내야 한다.
주석 - 클라이언트측>>
s.connect((socket.gethostname(),8080))
서버측 8080 포트에 연결하겠다는 의미이다. 만일 동일 PC가 아닌 외부에 연결할 경우 gethostname이 아닌 아이피를 입력하면 된다.
message = s.recv(1024).decode("utf-8")
1024는 1024바이트 사이즈 버퍼를 준비하겠다는 의미이다.
'파이썬(Python) > 화이트해킹,침투테스트(Hack,Penetration)' 카테고리의 다른 글
Python Socket 만으로 포트 스캐너 만들기(Port Scanner) (0) | 2021.08.13 |
---|---|
Python 버퍼보다 큰 데이터 주고받기 (패킷 보내기, 받기) (0) | 2021.08.07 |
Python으로 wifi 주소 확인하고 비밀번호 입력하여 연결하기 (윈도우 환경) (0) | 2021.08.01 |
Python으로 wifi 주소 확인하고 연결하기 (윈도우 환경) (0) | 2021.07.31 |
Python 에서 Nmap 설치 하고 네트워크 검색(port)해보기(설치시 에러 해결) (0) | 2021.07.23 |