The Pocket Guide to TCP/IP Sockets: C Version

Similar documents
The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to TCP/IP Sockets: C Version

vi 사용법

IPv6 적용

PowerPoint 프레젠테이션

The Pocket Guide to TCP/IP Sockets: C Version

본 강의에 들어가기 전

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to TCP/IP Sockets: C Version

본 강의에 들어가기 전

본 강의에 들어가기 전

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

슬라이드 1

2009년 상반기 사업계획

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]

The Pocket Guide to TCP/IP Sockets: C Version

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

<43B7CE20BECBBEC6BAB8B4C220BCD2C4CFC7C1B7CEB1D7B7A1B9D62E687770>

제1장 Unix란 무엇인가?

K&R2 Reference Manual 번역본

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

슬라이드 1

슬라이드 1

Microsoft PowerPoint - 03-TCP Programming.ppt

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

Microsoft PowerPoint - chap10-함수의활용.pptx

PowerPoint 프레젠테이션

11장 포인터

PowerPoint 프레젠테이션

게시판 스팸 실시간 차단 시스템

KEY 디바이스 드라이버

Chapter 4 UDP 소켓 사용법

Microsoft PowerPoint - 09-CE-23-윈도우 소켓

보안(KDN)

제1장 Unix란 무엇인가?

Microsoft Word - Network Programming_NewVersion_01_.docx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint PythonGUI-socket

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :

PowerPoint 프레젠테이션


슬라이드 1

[ 목차 ] 1. 취약점개요 2. 배경지식 3. 취약점발생결과 (exploit 테스트 ) 4. 취약점발생원인분석 4.1 취약점 Q&A 5. exploit 분석 6. 보안대책 7. 결론 8. 레퍼런스 2

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Windows 8에서 BioStar 1 설치하기

INDEX 1. 개요 DNS 서버구축하기 DNS 구축에필요한프로그램설치 DNS 설정 호스트추가. (zone 파일생성 ) 상위기관에네임서버등록.( 네임호스트추가 ) 활용

Sena Technologies, Inc. HelloDevice Super 1.1.0

본 강의에 들어가기 전

Microsoft Word - KPMC-400,401 SW 사용 설명서

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

SYN flooding

목차 목차포트스캔코드포트스캔결과포트스캔탐지코드포트스캔탐지결과 참조

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

PowerPoint 프레젠테이션

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

SCTP 표준기술 동향

9장 윈도우 소켓 프로그래밍

RHEV 2.2 인증서 만료 확인 및 갱신

PowerPoint 프레젠테이션

Lab 3. 실습문제 (Single linked list)_해답.hwp

본교재는수업용으로제작된게시물입니다. 영리목적으로사용할경우저작권법제 30 조항에의거법적처벌을받을수있습니다. [ 실습 ] 스위치장비초기화 1. NVRAM 에저장되어있는 'startup-config' 파일이있다면, 삭제를실시한다. SWx>enable SWx#erase sta

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint 프레젠테이션

개요 IPv6 개요 IPv6 주소 IPv4와공존 IPv6 전환기술 (Transition Technologies)

untitled

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Chapter #01 Subject

[Brochure] KOR_TunA

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Chapter 4. LISTS

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - lab14.pptx

bn2019_2

4. 스위치재부팅을실시한다. ( 만약, Save 질문이나오면 'no' 를실시한다.) SWx#reload System configuration has been modified. Save? [yes/no]: no Proceed with reload? [confirm] (

강의10

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

PowerPoint 프레젠테이션

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Sena Device Server Serial/IP TM Version

The Pocket Guide to TCP/IP Sockets: C Version

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint 프레젠테이션

Microsoft Word - NAT_1_.doc

05_tree

Transcription:

인터넷프로토콜 03 장 도메인네임시스템과주소 패밀리 (IPv4-IPv6 서비스 ) 1

목차 제 3 장도메인네임시스템과주소패밀리 3.1 도메인네임주소를숫자주소로매핑하기 3.2 IP 버전에무관한주소-범용코드의작성 3.3 숫자주소에서도메인네임주소획득하기 2

getaddrinfo() 를활용한주소 범용 (Generic) 코드 주소범용 (Generic) 코드란? 주소버전 (IPv4, IPv6) 에관계없이동작하는코드 기존코드의문제점 주소구조체를지정하여사용할경우, 사용자의각기다른주소버전의입력에유연하게대처하지못함 IPv4 코드는 IPv4 주소만처리하고 IPv6 코드는 IPv6 주소만처리 해결방안 이유 : 각주소버전에맞는구조체가코드에묶임 addrinfo 를처리하는 getaddrinfo 함수를사용하여 resolving 한결과를처리 사용자주소입력 (IPv4 or IPv6 or DNS) getaddrinfo 를수행하여가용한주소전부반환 각개별주소에대하여연결혹은연결대기시도 3

SetupTCPClientSocket(): 서버와연결을 수행하고연결된소켓을반환 (1) //SetupTCPClientSocket() // 서버호스트의주소 (IPv4, IPv6, DNS) 및서비스이름을입력하면서버와연결된소켓을반환 int SetupTCPClientSocket(const char *host, const char *service) { struct addrinfo addrcriteria; // 반환받을주소의형태를담을구조체 memset(&addrcriteria, 0, sizeof(addrcriteria)); // 0 으로초기화 addrcriteria.ai_family = AF_UNSPEC; // IPv4 와 IPv6 모두반환요청 addrcriteria.ai_socktype = SOCK_STREAM; // 스트리밍소켓만반환요청 addrcriteria.ai_protocol = IPPROTO_TCP; // TCP 프로토콜만반환요청 struct addrinfo *servaddr; // 서버의주소를반환받을구조구조체 int rtnval = getaddrinfo(host, service, &addrcriteria, &servaddr); if (rtnval!= 0) DieWithUserMessage("getaddrinfo() failed", gai_strerror(rtnval)); int sock = -1; 4

SetupTCPClientSocket(): 서버와연결을 수행하고연결된소켓을반환 (2) for (struct addrinfo *addr = servaddr; addr!= NULL; addr = addr->ai_next) { // TCP 를이용하여안정된소켓을생성 sock = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol); if (sock < 0) continue; // 소켓생성실패, 다음주소로시도 // 에코서버에연결시도 if (connect(sock, addr->ai_addr, addr->ai_addrlen) == 0) break; // 소켓연결성공, 반복문을탈출하고소켓을반환 } close(sock); // 소켓연결실패, 다음주소로다시시도 sock = -1; } freeaddrinfo(servaddr); // getaddrinfo() 의결과로반환된메모리를회수 return sock; 5

SetupTCPServerSocket(): 서버의주소를 획득하고 bind 및 listen 수행 (1) SetupTCPServerSocket() 1 static const int MAXPENDING = 5; // 최대연결대기수 2 3 int SetupTCPServerSocket(const char *service) { 4 // 서버주소구조체의생성 5 struct addrinfo addrcriteria; 6 memset(&addrcriteria, 0, sizeof(addrcriteria)); 7 addrcriteria.ai_family = AF_UNSPEC; // IPv4, IPv6 주소모두받아들임 8 addrcriteria.ai_flags = AI_PASSIVE; 9 addrcriteria.ai_socktype = SOCK_STREAM; 10 addrcriteria.ai_protocol = IPPROTO_TCP; 11 12 struct addrinfo *servaddr; 13 int rtnval = getaddrinfo(null, service, &addrcriteria, &servaddr); 14 if (rtnval!= 0) 15 DieWithUserMessage("getaddrinfo() failed", gai_strerror(rtnval)); 16 6

SetupTCPServerSocket(): 서버의주소를 획득하고 bind 및 listen 수행 (2) 17 int servsock = -1; 18 for (struct addrinfo *addr = servaddr; addr!= NULL; addr = addr->ai_next) { 19 // TCP 소켓생성 20 servsock = socket(servaddr->ai_family, servaddr->ai_socktype, 21 servaddr->ai_protocol); 22 if (servsock < 0) 23 continue; // 소켓생성실패, 다음주소로재시도 25 26 if ((bind(servsock, servaddr->ai_addr, servaddr->ai_addrlen) == 0) && 27 (listen(servsock, MAXPENDING) == 0)) { 28 // 소켓의지역주소를출력 29 struct sockaddr_storage localaddr; 30 socklen_t addrsize = sizeof(localaddr); 31 if (getsockname(servsock, (struct sockaddr *) &localaddr, &addrsize) < 0) 32 DieWithSystemMessage("getsockname() failed"); 33 fputs("binding to ", stdout); 34 PrintSocketAddress((struct sockaddr *) &localaddr, stdout); 35 fputc('\n', stdout); 36 break; 37 } 7

SetupTCPServerSocket(): 서버의주소를 획득하고 bind 및 listen 수행 (3) 38 39 close(servsock); // 소켓을종료하고다시시도 40 servsock = -1; 41 } 42 43 44 freeaddrinfo(servaddr); 45 46 return servsock; 47 } 8

AcceptTCPConnection(): 클라이언트의연결을처리 // AcceptTCPConnection() // 클라이언트의연결을처리하고연결된소켓을반환 1 int AcceptTCPConnection(int servsock) { 2 struct sockaddr_storage clntaddr; // 클라이언트주소 3 // 클라이언트주소구조체길이설정 ( 입출력파라미터 ) 4 socklen_t clntaddrlen = sizeof(clntaddr); 5 6 // 클라이언트의연결을대기 7 int clntsock = accept(servsock, (struct sockaddr *) &clntaddr, &clntaddrlen); 8 if (clntsock < 0) 9 DieWithSystemMessage("accept() failed"); 10 11 // 이때 clntsock는클라이언트에연결됨 12 13 fputs("handling client ", stdout); 14 PrintSocketAddress((struct sockaddr *) &clntaddr, stdout); 15 fputc('\n', stdout); 16 17 return clntsock; 18 } 9

범용코드활용 Makefile CFLAGS = -g -std=gnu99 COM_OBJS = DieWithMessage.o AddressUtility.o CLI_OBJS = TCPClientUtility.o TCPEchoClient.o SRV_OBJS = TCPServerUtility.o TCPEchoServer.o TARGETS = echo_cli echo_srv all: $(TARGETS) echo_cli : $(COM_OBJS) $(CLI_OBJS) gcc -o echo_cli $(CLI_OBJS) $(COM_OBJS) echo_srv : $(SRV_OBJS) $(COM_OBJS) gcc -o echo_srv $(SRV_OBJS) $(COM_OBJS) clean: rm $(COM_OBJS) $(CLI_OBJS) $(SRV_OBJS) rm $(TARGETS) 10

TCPEchoClient.c (1) 11

TCPEchoClient.c (2) 12

TCPEchoServer.c 13

IPv4-IPv6 상호연결 상호연결조건 IPv4 전용프로그램의경우 상호종단간 IPv4 지원 IPv6 전용프로그램의경우 상호종단간 IPv6 지원 IPv4, IPv6 범용프로그램의경우 상호종단모두 IPv4 를사용하거나상호종단모두 IPv6 를사용하는경우 단, 듀얼스택시스템의경우, IPv4 와 IPv6 간연결이가능 듀얼스택 (dual stack) 시스템 IPv4 및 IPv6 를동시에지원하는시스템 14

과제 범용코드를활용한서버, 클라이언트실습 2 장과제개선 2 프로그램수정 범용주소이용이가능하도록수정 (200 점 ) echo_cli lily.mmu.ac.kr 6000 15