TCP Server
TCP Server는 소켓이 2가지가 필요하다 . 하나는 Server 본인의 socket이고 나머지 하나는 Client의 소켓이다. accept라는 메서드를 이용해 Client의 소켓을 받아오고 그것을 통해서 Cilent와 통신을 한다. TCP는 UDP 통신과 다르게 좀 더 복잡한 과정을 거친다. UDP는 문자 서비스 TCP는 전화 서비스로 비유를 했었는데 문자는 보내기만하면 끝이지만 전화는 전화를 걸고 받아야하는 과정이 있기 때문에 좀 더 복잡하다고 생각하면 된다. Server의 코드를 보며 어떠한 것이 추가되었는지 어떤 역할을 하는지 알아보자.
# socket을 생성하는 부분에서 SOCK_STREAM(TCP방식), SOCK_DGRAM(UDP방식) 차이가 있음을 확인
# bind()를 통해 마찬가지로 port를 열어준다.
# listen() 메서드는 한번에 연결할 수 있는 사용자의 수이다.
# accept() 메서드가 중요하다. accept()메서드는 실행하면 연결요청이 올때까지 대기상태에 있으며 연결에 성공하면 연결을 요청한 Client의 정보를 반환한다. client_sock을 통해 Client와 데이터를 교환할 수 있다. Client의 연결요청은 connect() 메서드로 하는데 잠시 후 확인 해 보자.
# 다음으로 UDP(recvfrom(), sendto())방식과 다르게 recv(), send()만 입력하고 있다. 그 이유는 client.sock 변수에 이미 accept에서 받은 client에 대한 정보가 다 있기 때문이다.
#sever_sock.close()메서드는 server에서 생성한 소켓을 지워준다.
※ TCP Client예제를 보기 앞서 sys 모듈에 대해 알고 넘어가자. sys 모듈은 파이선을 실행명을 할때 파라미터로 주는 데이터의 값을 가지고 있다.
예를 들어 확인해보자.!
# 위와 같이 sys모듈만 import한 소스코드를 실행해볼 것이다.
# 이와 같이 파라미터를 여러개 주고 .. sys에대한 아규먼트를 보면 다음과 같이 확인할 수 있다.
# 결과.
TCP Client
# import sys ! Client 예제에서 위에서 배운 sys 모듈을 사용해 보자.
# sock.connect() 메서드에서 튜플타입으로 2번째 파라미터와 3번째 파라미터를 넣어준다. ( 0번째 파라미터는 파일이름 ) 여기서 클라이언트를 실행시킬 때 2번째 파라미터엔 Server의 ip주소 3번째 파라미터엔 port번호를 입력할 것이다.
# Client가 입력한 input_data를 Server에게 보낸다.
# 그리고 Server에서 보내주는 데이터를 받아 출력한다. !
실행 결과
# Server를 실행시키고 TCP SOCKET이라는 데이터를 입력하고 보낸다.
# 위에서 봤듯이 Server에서는 받은 데이터를 그대로 되돌려준다. 따라서 echo를 보면 그 값을 그대로 받은 것을 확인 할 수 있다.
# TCP SOCKET을 받은 것을 확인 할 수 있다. decoding을 안해줘서 ... 앞에 b가 붙었다.!
'Network Hacking' 카테고리의 다른 글
6일차] MAKE Python Module For Ethernet Header Analysis (0) | 2018.03.19 |
---|---|
5일차]IP Story (0) | 2018.03.16 |
4일차] Header analysis(Udp, Ip, Ethernet Header) (0) | 2018.03.15 |
2일차]파이선 환경 구성 및 UDP 통신 (0) | 2018.03.13 |
1일차] 환경 구성 (0) | 2018.03.12 |