2017. 6. 12. 19:03ㆍNetworkHacking/Network
[ TCP통신 주요 메서드 개념정리 ]
[Server]
#socket = socket.socket( socket.AF_INET , socket.SOCK_STREAM )
1> socket.bind( addr ) // 서버의 아이피와 포트번호를 고정
2> socket.listen(0) // 클라이언트의 연결을 받을 수 있는 상태
3> socket.accept() // 클라이언트로부터 소켓과 클라이언트의 주소를 반환
4> socket.recv( byte수 ) // 연결되어진 클라이언트로부터 데이터를 받는다
[Client]
#socket = socket.socket( socket.AF_INET , socket.SOCK_STREAM )
1> socket.connect( 서버addr ) // 서버에게 연결을 시도한다
2> socket.send( data ) // 연결된 서버에게 데이터를 보낸다
[1] TCP통신 서버와 클라이언트의 동기화
[ 서버 / 클라이언트 ]
import socket server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) server_socket.bind( ('192.168.2.179', 8585) ) //서버의 아이피와 포트번호 지정 server_socket.listen(0) // 클라이언트의 연결요청을 기다리는 상태 client_socket , addr = server_socket.accept() // 연결요청을 받음 data = client_socket.recv( 65535 ) // 클라이언트의 데이터를 가져옴 print ( "recieve Data : " , data.decode() ) | import socket sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect( ('192.168.2.179',8585) ) // 서버와의 연결시도 sock.send( "hello".encode() ) // 서버에게 데이터를 전송 |
[실행결과]
[ 그림1 ]
서버에서 클라이언트로부터 받은 데이터를 출력해주는 결과를 확인할 수 있습니다
이제 받은 데이터를 클라이언트에게 돌려주는 에코서버를 만들어보겠습니다
[2] TCP통신 에코서버
[ 에코서버 / 클라이언트 ]
import socket server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) server_socket.bind( ('192.168.2.179', 8585) ) server_socket.listen(0) client_socket , addr = server_socket.accept() data = client_socket.recv( 65535 ) client.socket.send( data ) // 받은 데이터를 돌려주는 지점 print ( "Recieved Data : " , data.decode() ) | import socket sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect( ('192.168.2.179',8585) ) sock.send( "hello".encode() ) data= sock.recv( 65535 ) // 데이터를 돌려받는 지점 print( "데이터를 돌려받았다 : ", data ) |
[실행결과]
[ 그림2 ]
이를 응용해서 하나 더 만들어보겠습니다. 조건은 다음과 같이 지정하겠습니다
1> 하나의 서버에 여러개의 클라이언트가 접속할 수 있다 ㅡ> Thread 이용
2> 연결된 클라이언트와 서버는 무한히 데이터를 주고받는다 ㅡ> 반복문 이용
[3] 심화과정
[ 그림3 ]
왼쪽이 서버측 코드이고 오른쪽이 클라이언트의 코드입니다
스레드를 사용해서 클라이언트의 연결요청을 여러개 받을 수 있도록 설계하였습니다
[ 그림4 ]
먼저 우측상단의 클라이언트에서 서버에 연결한 후 데이터를 보냈고, 다음 클라이언트를 실행시켜서 데이터를 보내보았습니다
이상으로 TCP통신의 동기화 과정 블로깅을 마치겠습니다
'NetworkHacking > Network' 카테고리의 다른 글
메서드를 활용한 계층별 헤더 분석 (0) | 2017.06.17 |
---|---|
스캔 프로그래밍 / 계층별 헤더 프로그래밍 (0) | 2017.06.14 |
UDP통신 파이썬 소켓 프로그래밍 (0) | 2017.06.12 |
네트워크해킹 실습환경 구축 (0) | 2017.06.08 |
OSI7 Layer , TCP/IP (0) | 2017.04.22 |