1. OSI 7 계층 (https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95)
OSI 7 계층의 탄생 배경
- 여러 정보 통신 업체 장비들간 호환성 필요
- 1984년 OSI 참조 모델 발표
상위 3계층(5~7)
7 Layer (Application Layer/응용 계층)
- 온라인 게임, 채팅 앱, 웹, ...
- DNS, DHCP, FTP, HTTP, ..
6 Layer (Presentation Layer/표현 계층)
5 Layer (Session Layer/세션 계층)
- 암호화, 인코딩, ...
- 추상적인 계층
- SSL, ...
--------------------------------------------------------------
하위 4계층(1~4) : 통신을 담당
4 Layer (Transport Layer/전송 계층)
- TCP, UDP
- 전송 방식
3 Layer (Network Layer/네트워크 계층)
- IP, ICMP,
- 전달 방식(경로 설정)
2 Layer (Data-link Layer/ 데이터 링크 계층)
- ARP, Ethernet
- 가장 신뢰할 수 있는 구간.
- 통신의 가장 기본인 계층
1 Layer (Physical Layer/물리 계층)
- 모든 물리적인 내용
! TCP/IP protocol Suite (인터넷 5계층)
- 표준안을 만들기 전 계층
- osi 5,6 계층을 제외한 거임
2. 파이썬을 이용한 소켓 프로그래밍
- 소켓(socket)이란? 입/출력
1) 표준 입/출력: input / print ...
2) 파일 입출력: File Descroptor(FD), File Object ...
3) 네트워크를 통한 입/출력: Soket Object, Client Socket, Server Socket
! 네트워크 구조
- 1:1 방식(P2P/PeerToPeer): 일반적인 전화구조, 토렌트 등..
- 1:n 방식(Clinet/Server): 게임, 웹서비스 등..
3. TCP socket(Client) 만들어보기
1) TCP socket (Client) 만들어보기
1)) socket.socket(): 전송방식 결정
생성된 소켓 객체를 통해 누구랑 연결할지를 결정
2)) sock.connect( ('ip', port) )
! port: 서버에서 서비스를 식별하는 식별자 (서버에서 정한다)
현재 서버에서 서비스중인 포트번호 확인
#> netstat -ant (꼭 익혀두기)
포트는 1 ~ 65535까지 사용이 가능
well-known port: 1 ~ 1024(10000) 잘 알려진곳에 쓰이는 곳
! ip: 네트워크상에서 호스트를 식별하는 식별자
import socket
sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
ipv4라는뜻 TCP라는뜻
2) TCP Socket(Server)
sock.bind()
- 생성된 소켓 객체를 통해 사용할 호스트와 포트를 정한다
sock.listen()
- 생성된 소켓 객체를 통해 연결할 수 있는 최대 갯수, 서버상태를 listen으로 바꿔주게 된다.
sock.accept()
- 클라이언트가 연결되기를 기다린다.
- 동기화 메소드로 블록킹 된다.
- 클라이언트 연결요청이 오면 해당 클라이언트에 대한 소켓 객체를 생성해서 돌려준다.
3) 데이터 송/수신
- 규칙에 따라서 전송
- 문자 데이터 송/수신
- 누가먼저 데이터를 보내든 상관 없다.
- 멀티 스레드 프로그래밍을 하지 않는 이상 송/수신은 동기화 되어야한다.
* 파이썬에서 제공하는 문자열 타입
- str, bytes, bytearray
- 파이썬의 str 타입은 유니코드(2바이트로 표현)
- 그래서 파이썬3 이후부터는 한글 사용이 가능
- 네트워크 통신은 바이트 단위로 이루어진다.
- bytes 타입은 문자에 대한 바이트 표현
- bytes Vs bytearray = 변경 불가능 Vs 변경 가능한
'Hacking > Network penetration' 카테고리의 다른 글
Network hacking - struct 모듈, Layer3(IPv4) (0) | 2017.11.05 |
---|---|
Network hacking - Socket Programming (0) | 2017.10.29 |
Network hacking - 실습환경 세팅하기(3) (0) | 2017.10.19 |
Network hacking - 실습환경 세팅하기(2) (0) | 2017.10.18 |
Network hacking - 실습환경 세팅하기(1) (0) | 2017.10.18 |