티스토리 뷰
2.1 생성과 해지
socket()
tcp나 udp 통신을 하기 위해 사용
파라미터
int socket(int protocolFamliy, int type, int protocol)
int protocolFamliy
소켓의 패밀리 결정
인터넷 프로토콜 패밀리 프로토콜을 사용하는 소켓 : PF_INET
int type
소켓의 형태를 지정(데이터 전송의 의미를 결정)
SOCK_STREAM : TCP
SOCK_DGRAM : UDP
int protocol
특정 종단간 프로토콜을 나타냄
tcp 스트림 소켓 : IPPROTO_TCP
udp 데이터그램 소켓 : IPPROTO_UDP
0으로 설정할 경우 : 지정된 프로토콜 패밀리 및 형태를 위한 디폴트 종단간 프로토콜 사용
반환값 : 음의 값이 아니면 성공, -1은 실패
close()
소켓을 종료할 때 호출하는 함수(할당된 자원 회수)
사용하지 않을 소켓을 파라미터로 지정
파라미터
int close(int socket)
반환값 : 성공시 0, 실패시 -1
2.2 주소지정
소켓을 사용하는 프로그램이 커널에 인터넷 주소와 포트를 지정하는 방법
클라이언트는 통신할 서버의 주소와 포트를 지정해야 함
소켓 API
소켓과 관련된 주소를 지정하기 위한 데이터 형태
sockaddr 구조체
struct sockaddr
{
unsigned short sa_family; //패밀리 추가
char sa_data[14]; //패밀리 특정 주소 정보
}
...중간 생략...정리할 부분
* 2.2 주소 지정(p.9)
구조체 sockaddr_in 중요
위 구조의 도식화 -> p.7
2.3 TCP 클라이언트
서버측 함수
socket()
bind() 소켓과 포트번호를 결합시켜주는 것
listen()
accept() <- 서버는 여기까지 수행한 후 클라이언트 대기
receive() 클라이언트에서 데이터를 받음
send() 요청에 대해 응답
close() 통신 종료
클라이언트측 함수
socket()
connet() 서버로 연결
send() 데이터 전송
receive() 서버로부터 응답 받음
close() 통신 종료
connet()
파라미터
int connet(int socket, struct sockaddr *foreignAddress, unsigned int addressLength)
socket
socket()에 의해 생성된 식별자
foreignAddress
소켓 API가 총괄적임
sockaddr의 포인터로 선언
(struct sockaddr *) &echoServAddr : &echoServAddr의 주소로부터 struct sockadr *의 구조체를 갖는다
addressLength
주소 구조체의 길이를 나타냄
고정적으로 sizeof(struct sockaddr_in)으로 주어짐
send()
모든 데이터를 다 보낼 떄 까지 블록(block)되는 것
※ call by reference와 call by value의 차이점 알아보기
파라미터(call-by-reference 방식으로 주소만 가져다 씀)
int send(int socket, const void * msg, unsigned int msgLength, int flags)
socket
연결된 소켓의 식별자
msg
send()로 전송하는 메시지
msgLength
메시지의 길이, 바이트 단위
flags
소켓 호출의 디폴트 도작을 변경시키는 방법을 제공(디폴트 동작 : 0)
반환값
정상 : 전송한 데이터의 바이트 수
비정상 : -1
char *echoString의 의미 : 어떤 주소(echoString)로부터 시작하는 내용이 char형을 가진다.
recv()
어느 정도의 바이트가 이동될 때까지 블록(block)되는 것
파라미터
int recv(int socket, void * rcvBuffer, unsigned int bufferLength, int flags)
socket
연결된 소켓의 식별자
rcvBuffer
받은 데이터를 저장하는 버퍼를 가리킴
bufferLength
버퍼의 길이, 한 번에 받을 수 있는 최대 바이트 수
flags
소켓 호출의 디폴트 도작을 변경시키는 방법을 제공(디폴트 동작 : 0)
반환 값
정상 : 전송한 데이터의 바이트 수
비정상 : -1
close() 함수를 호출하여 종료
TCP Client
char *servIP 서버의 ip를 외부 인자를 char형으로 우선 받은 뒤 숫자로 바꿔서 struct sockaddr_in echoServAddr에서 사용함
'Web & Network' 카테고리의 다른 글
자바스크립트 자동 새로고침 (984) | 2015.09.29 |
---|---|
멀티태스킹(Multi tasking) (1366) | 2013.11.11 |
신호(Signals) (1329) | 2013.11.04 |
UDPEchoServer (1107) | 2013.10.30 |
소켓옵션들 (1081) | 2013.10.28 |
- Total
- Today
- Yesterday
- 웹
- 프로그래밍 언어
- 사이버테러
- 악성코드
- network
- 자바스크립트
- CloudFlare
- DoH
- python
- exploit
- 파이썬
- CODEGATE 2014
- 해커스쿨
- hackerschool
- FTZ
- CK Exploit Kit
- BOF
- 프로그래밍
- TISTORY
- 문제풀이
- DNSOverHTTPS
- Wargame
- 웨일브라우저
- Sublime Text 2
- 스크립트
- 개발
- www
- writeup
- 티스토리
- 분석
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |