Internet Address Conversion Functions

Slides:



Advertisements
Similar presentations
이름과 주소 변환 DNS 해결사 함수 정보통신대학 컴퓨터 학과 도희성 Chap. 11.
Advertisements

HANNAM Univ. 제 3 장 주소 체계와 데이터 정렬 Network Lab. Byoung-Son, Choi TCP/IP Socket Programming…
Network Lab. Byoung-Son, Choi
Understanding of Socket and File I/O
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
TCP/IP Network Experimental Programming [IPv6에 의한 통신 실험]
13장 소켓.
Network Lab. Young-Chul Hwang
TCP Client/Server Program
Department of Computer Science and Engineering
제 9 장 구조체와 공용체.
PHP입문 Izayoi 김조흔.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
24 장 TCP/IP 24.1 개요 24.2 네트워크층 24.3 주소 지정 24.4 서브넷팅틍
Linux에서의 IP, Port, 네트워크 바이트 순서, 주소 변환 주소 할당 등…
Chapter 03. 소켓 주소 구조체 다루기.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
얇지만 얇지 않은 TCP/IP 소켓 프로그래밍 C 2판
컴퓨터 네트워크 PART 03 프로그래밍 (chapter 01 Socket 프로그래밍) 임효택
호스트이름과 네트워크이름 찾기 (Hostname and Network Name Lookups)
Internet Address Conversion Functions
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
11 소켓 프로그래밍 기초.
11 소켓 프로그래밍 기초.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
14장 소켓.
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
Department of Computer Engineering
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Department of Computer Engineering
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Socket Address Structure and Byte Ordering Functions
Homework 6… 12월 2일(금) 11:59pm까지 자신의 이름과 학번을 출력해 주는 유닉스/리눅스 네트워크 소켓 서버 프로그램 과 클라이언트 프로그램 을 작성해 보세요 참고 (실습1) Hello 프로그램 helloserver.c helloclient.c 컴파일.
Department of Computer Engineering
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
Department of Computer Science and Engineering
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
Chapter 03. 소켓 주소 구조체 다루기.
14장. 포인터와 함수에 대한 이해.
Socket Address Structure and Byte Ordering Functions
Internet Address Conversion Functions
Socket Address Structure and Byte Ordering Functions
Linux Socket Programming - 도메인과 주소체계 -
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
Internet Address Conversion Functions
School of Electronics and Information. Kyung Hee University.
네트워크 프로그래밍의 이해 School of Electronics and Information.
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
Department of Computer Engineering
Network 네트워크 이론 및 실습 TCP / IP 4장.
Department of Computer Engineering
인터넷 주소변환 School of Electronics and Information. Kyung Hee University.
Chapter 04. TCP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
Part 05 TCP/IP 1. 네트워크 2. 포트번호.
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
제 4 장 Record.
Chapter 03. 소켓 주소 구조체 다루기.
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
13. 포인터와 배열! 함께 이해하기.
Department of Computer Engineering
Presentation transcript:

Internet Address Conversion Functions Department of Computer Engineering Kyung Hee University. Choong Seon Hong

포트번호 IP 주소 포트번호 Well-known 포트 /etc/services 특정 호스트를 찾는데 사용 포트번호 16 비트로 표현 (0~65535) IP 데이터그램에 실린 데이터를 최종적으로 전달할 프로세스를 구분 호스트 내의 통신 접속점 (소켓)을 구분하는데 사용 같은 포트번호를 TCP와 UDP가 동시에 사용 가능 Well-known 포트 1023번 이하가 배정되어 사용됨 널리 사용되는 서비스를 위해 미리 지정되어 있는 포트번호 예) ftp, telnet, mail, http 등 /etc/services TCP/IP가 지원하는 응용 서비스와 포트번호가 정리된 파일

포트번호 확인 #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> struct servent * getservbyname (string service, string protocol) getservbyname()은 well-known 포트를 사용하는 TCP/IP 응용 프로그램의 포트번호를 알아내는 함수이다. 서비스 이름과 프로토콜을 인자로 하여 호출하면 서비스 관련 각종 정보를 포함하고 있는 servent라는 구조체의 포인터를 리턴한다. struct servent { char *s_name; // 서비스 이름 char **s_aliases; // 별명 목록 int s_port; // 포트번호 char *s_proto; // 사용하는 프로토콜 };

프로그램 예제 확인 byte_order.c

Big-endian 32 bits IP 주소(binary) IP 주소를 도메인 네임과 dotted decimal 방식으로 표현 Dotted decimal은 15개의 문자로 구성된 스트링 변수 주소 표현법의 상호 변환 함수 #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> unsigned long inet_addr(const char *string); int inet_aton(const char *string, struct in_addr *addr); char *inet_ntoa(struct in_addr addr); int inet pton(int family, const char *strptr, void *addrptr); const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len); networking.khu.ac.kr 10100011 10110100 01110110 01100011 163.180.118.99 도메인 네임 Big-endian 32 bits IP 주소(binary) 10진 표기법 inet_addr() inet_aton() inet_pton() gethostbyname() inet_ntoa() Inet_ntop() gethostbyaddr()

프로그램 예제 확인 프로그램 예제 inet_addr.c, inet_aton.c, inet_ntoa.c 2. 실행결과.

프로그램 예제 확인 ascii_ip.c Dotted decimal 표현의 주소를 4바이트의 IP 주소로 출력 변환된 4바이트의 IP를 dotted decimal 표현으로 출력

Big-endian 32bits IP 주소(binary) 도메인 주소변환 DNS (Domain Name Service) 도메인 네임으로부터 IP 주소를 반환 IP 주소로부터 도메인 네임을 반환 도메인 주소 변환 함수 #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> struct hostent *gethostbyname(const char *hname); struct hostent *gethostbyaddr(const char *in_addr, int len, int family); networking.khu.ac.kr 10100011 10110100 01110110 01100011 163.180.118.99 도메인 네임 Big-endian 32bits IP 주소(binary) 10진 표기법 inet_addr() inet_aton() inet_pton() gethostbyname() inet_ntoa() Inet_ntop() gethostbyaddr()

도메인 주소변환 gethostbyname() gethostbyaddr() hname에 해당하는 호스트의 정보를 hostent 구조체 포인터로 반환 gethostbyaddr() in_addr, 길이, 주소 타입으로부터 hostent 구조체 포인터 반환 struct hostent { char *h_name; // 호스트 이름 char **h_aliases; // 호스트 별칭 int h_addrtype; // 호스트 주소의 종류 int h_length; // 주소의 크기 char **h_addr_list; // IP 주소 리스트 }; #define h_addr haddr_list[0]; // 첫 번째(대표) 주소 Member Description h_name 호스트의 공식이름 h_aliases 호스트의 별명을 배열의 포인트로 반환 h_addrtype 주소형태(IPv4:AF_INET IPv6:AF_INET6) h_length 주소길이 (IPv4:4 IPv6:16) h_addr_list IP주소를 배열의 포인트로 반환 (IPv4:각 포인터는 4바이트 IP주소를 가리킨다.)

프로그램 예제 확인 get_hostent.c , get_host_byaddr.c

주의 : 모든 데이터는 네트워크 바이트 순서로 저장 해야 한다. IPv4의 주소체계를 나타내는 구조체 클라이언트 또는 서버의 구체적인 주소를 표현을 위해 사용 주소체계 IP 주소 포트번호 struct sockaddr_in { sa_family_t sin_family; // 주소 체계 uint16_t sin_port; // 16비트 포트번호 struct in_addr sin_addr; // 32 비트 IP 주소 char sin_zero[8]; // 사용되지 않음 }; struct in_addr { uint32_t s_addr; // 32비트 IP 주소를 저장하는 구조체 }; 주의 : 모든 데이터는 네트워크 바이트 순서로 저장 해야 한다.

인터넷 주소 초기화 Template 1: struct sockaddr_in addr;      2: char *serv_ip=“163.180.118.99";    3: char *serv_port=“9999";      4: memset(&addr, 0, sizeof(addr_len));   5: addr.sin_family = AF_INET;   6: addr.sin_addr.s_addr = inet_addr(serv_ip);   7: addr.sin_port = htons(atoi(serv_port)); //스트링 정수 1: struct sockaddr_in addr; 2: char *serv_port="9190";   3: memset(&addr, 0, sizeof(addr_len)); 4: addr.sin_family = AF_INET; 5: addr.sin_addr.s_addr = htons(INADDR_ANY); 6: addr.sin_port = htons(atoi(serv_port));

주소 정보 할당하기 #include <sys/type.h> #include <sys/socket.h> int bind(int sockfd, struct sockaddr * myaddr, int addrlen); sockfd : 주소를 할당하고자 하는 소켓의 파일 디스크립터를 인자로 전달 myaddr : 할당하고자 하는 주소 정보를 지니고 있는 sockaddr_in 구조체 변수의 포인터를 인자로 전달 addrlen : 인자로 전달될 주소 정보 구조체의 길이를 전달 함수 호출이 성공하면 sockfd가 가리키는 소켓에 myaddr이 가리키는 주소 정보가 할당됨

소켓주소 구조체 프로토콜 체계에 따라 주소 체계가 다름 socket 함수와 bind 함수는 특정 프로토콜 체계를 위한 함수가 아님 프로토콜에 독립적 따라서, 일반적으로 선언되어야 함 Local Unix 프로토콜을 위한 sockaddr_un 구조체의 포인터도 인자값으로 사용할 수 있어야 함 struct sockaddr { sa_family sin_family; // address_family char sa_data[14]; // 주소 };

실습 실습 시간에 소개된 함수들을 사용하여 다음 프로그램을 작성하시오. 사용자가 도메인이름(예를 들어, www.khu.ac.kr)이나 ip주소(예를 들어, 163.180.177.187)를 입력하면 해당 호스트의 정보를 출력 화면에 출력과 동시에 해당 정보를 result.dat에 기록 화면이나 파일에 출력하는 양식은 get_hostent.c 프로그램에서 출력하는 양식을 사용 도메인 이름이나 IP 주소 이외의 값이 입력된 경우 에러 메시지 출력

프로그램 예제 확인 프로그램 예제 bind_sock.c 실행결과.