Top Banner
한한한한한 한한한한한한 한한한 한한한한 한한한 1 한한 한한 한한 한한 한한 한한 Network Lab. 한 한 한
52

주소 변환 함수

Jan 04, 2016

Download

Documents

주소 변환 함수. Network Lab. 김 성 준. 목 차. 인터넷 IP 주소 인터넷 주소 클래스 Netmask 의 이해 IP 주소 할당 사설 IP 주소 예약된 IP 주소 IP 주소 처리. 인터넷 IP 주소. 보통 점으로 구분된 네 개의 10 진수로 구성 4 바이트로 구성 10 진 표기법. 인터넷 주소 클래스. 인터넷 주소의 구성 네트워크 주소 (Netid) 호스트가 연결되어 있는 네트워크 확인 호스트 주소 (Hostid) - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 주소 변환 함수

한남대학교 컴퓨터공학과 컴퓨터 네 트워크 실험실

1

주소 변환 함수주소 변환 함수

Network Lab.김 성 준

Page 2: 주소 변환 함수

2HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

목 차목 차

인터넷 IP 주소 인터넷 주소 클래스 Netmask 의 이해 IP 주소 할당 사설 IP 주소 예약된 IP 주소 IP 주소 처리

Page 3: 주소 변환 함수

3HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

인터넷 인터넷 IP IP 주소주소

보통 점으로 구분된 네 개의 10 진수로 구성 4 바이트로 구성 10 진 표기법

Page 4: 주소 변환 함수

4HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

인터넷 주소 클래스인터넷 주소 클래스

인터넷 주소의 구성

네트워크 주소 (Netid) 호스트가 연결되어 있는 네트워크 확인

호스트 주소 (Hostid) 네트워크의 호스트 중에 하나의 특정 호스트 확인

Netid HostidClasstype

Page 5: 주소 변환 함수

5HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

인터넷 주소 클래스인터넷 주소 클래스

인터넷 주소 클래스

Page 6: 주소 변환 함수

6HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

인터넷 주소 클래스인터넷 주소 클래스 (( 계속계속 ))

인터넷 주소 클래스

클래스 최소 최대 네트워크 비트 호스트 비트

A 0.0.0.0127.255.255.2

557 24

B128.0.0.

0191.255.255.2

5514 16

C192.0.0.

0223.255.255.2

5521 8

D224.0.0.

0239.255.255.2

5528 N/A

E240.0.0.

0247.255.255.2

5527 N/A

Page 7: 주소 변환 함수

7HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

10 진 표기법을 이용한 클래스

인터넷 주소 클래스인터넷 주소 클래스 (( 계속계속 ))

Page 8: 주소 변환 함수

8HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

Netmask (Mask)

NetmaskNetmask 의 이해의 이해

Mask255.255.0.0

Mask255.255.0.0

141.14.2.21

IP 주소141.14.0.0

IP 주소

Page 9: 주소 변환 함수

9HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

NetmaskNetmask 의 이해 의 이해 (( 계속계속 ))

netmask 를 적용하여 네트워크 주소 산출

Page 10: 주소 변환 함수

10HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

A, B, C 클래스 주소를 위한 Netmask

클래스 최소 최대 Netmask

A 0.0.0.0127.255.255.255

255.0.0.0

B128.0.0.0

191.255.255.255

255.255.0.0

C192.0.0.0

223.255.255.255

255.255.255.0

NetmaskNetmask 의 이해 의 이해 (( 계속계속 ))

Page 11: 주소 변환 함수

11HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

예제 3.1 (netmask.c)

예제 IP 초기화 address[]

adr_inet 초기화

최상위 바이트 검사

결과 출력

NetmaskNetmask 의 이해 의 이해 (( 계속계속 ))

Page 12: 주소 변환 함수

12HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

참고 사항 sockaddr_in 구조체

struct sockaddr_in { short sin_family;

u_short sin_port;struct in_addr sin_addr; }

in_addr 구조체struct in_addr {

u_long s_addr;}

NetmaskNetmask 의 이해 의 이해 (( 계속계속 ))

Address Family#define AF_UNSPEC PF_UNSPEC

#define AF_LOCAL PF_LOCAL

#define AF_UNIX PF_UNIX

#define AF_INET PF_INET

Protocol Family#define PF_UNSPEC 0

/* Unspecified. */

#define PF_LOCAL 1

/* Local to host */

#define PF_UNIX PF_LOCAL

/* Old BSD name for PF_LOCAL. */

#define PF_INET 2

/* IP protocol family. */

Page 13: 주소 변환 함수

13HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

초기화

각종 변수 및 초기값 설정 int x; /* Index variable */

struct sockaddr_in adr_inet; /* AF_INET */int len_inet; /* length */

unsigned msb; /* Most significant byte */ char class; char *netmask; static struct { unsigned char ip[4]; } addresses[] = { { { 44,135,86,12 } }, { { 127,0,0,1 } }, { { 172,16,23,95 } }, { { 192,168,9,1 } } };

NetmaskNetmask 의 이해 의 이해 (( 계속계속 ))

Page 14: 주소 변환 함수

14HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

adr_inet 초기화

memset(&adr_inet,0,sizeof adr_inet); // 메모리 초기화

adr_inet.sin_family = AF_INET; // 도메인 설정

adr_inet.sin_port = htons(9000); // 포트 번호 설정

memcpy(&adr_inet.sin_addr.s_addr, addresses[x].ip,4);

// addresses[x] -> adr_inet.sin_addr.s_addr 로 복사

len_inet = sizeof adr_inet; // 길이 정보 저장

※ htonl 함수 : 호스트 순서 주소를 네트워크 순서 주소로 변환

NetmaskNetmask 의 이해 의 이해 (( 계속계속 ))

Page 15: 주소 변환 함수

15HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

최상위 바이트 검사 msb = *(unsigned char *) adr_inet.sin_addr.s_addr; // 주소 추출 // 최상위 바이트 검사 if ( (msb & 0x80) == 0x00 ) { // 1 비트만 검사 class = 'A'; netmask = "255.0.0.0"; // 0000 A 클래스 } else if ( (msb & 0xC0) == 0x80 ) { // 2 비트만 검사 class = 'B'; netmask = "255.255.0.0"; // 1000 B 클래스 } else if ( (msb & 0xE0) == 0xC0 ) { // 3 비트만 검사 class = 'C';netmask = "255.255.255.0"; // 1100 C 클래스 } else if ( (msb & 0xF0) == 0xE0 ) { // 4 비트만 검사 class = 'D';netmask = "255.255.255.255"; // 1110 D 클래스 } else { class = 'E';netmask = "255.255.255.255"; // 1111 E 클래스 }

NetmaskNetmask 의 이해 의 이해 (( 계속계속 ))0x80 = 1000 0xC0 = 11000xE0 = 1110 0xF0 = 1111

Page 16: 주소 변환 함수

16HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

NetmaskNetmask 의 이해 의 이해 (( 계속계속 ))

결과 출력 printf("Address %u.%u.%u.%u is class %c netmask %s\n", addresses[x].ip[0], addresses[x].ip[1], addresses[x].ip[2], addresses[x].ip[3], class, netmask);

실행 결과[sjkim@alzza Chap03]$ ./netmaskAddress 44.135.86.12 is class A netmask 255.0.0.0Address 127.0.0.1 is class A netmask 255.0.0.0Address 172.16.23.95 is class B netmask 255.255.0.0Address 192.168.9.1 is class C netmask 255.255.255.0

Page 17: 주소 변환 함수

17HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

3 개의 클래스 (A, B, C) 클래스 신청 가능

Netid 를 부여 받아 Hostid 발급

interNIC

www.nic.org

한국 (www.krnic.or.kr)

IP IP 주소 할당주소 할당

Page 18: 주소 변환 함수

18HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

보통 IP 주소는 InterNIC 에 등록인터넷에 연결되지 않으면 유일한 IP 를 가질 필요

없음 .

RFC 1597 -> 사설 IP 할당 방법 기술

사설 사설 IP IP 주소주소

클래스 최소 최대 네트워크 마스크

A 10.0.0.0 10.255.255.255

255.0.0.0

B 172.16.0.0 172.31.255.255

255.255.0.0

C192.168.0.0

192.168.255.255

255.255.255.0사설 IP 주소 범위

Page 19: 주소 변환 함수

19HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

특정 목적을 위해 미리 예약된 IP 주소

RFC 1166 – INTERNET NUMBERS 예약된 IP 주소들을 나열

AMPRNET(The Amateur Radio Internet)

예약된 예약된 IP IP 주소 주소

클래스 최소 최대 네트워크 마스크

A 44.0.0.0 44.255.255.255

255.0.0.0

Page 20: 주소 변환 함수

20HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

문자열 <-> 숫자 변환 함수 제공 프로그램 작성이 용이

제공되는 함수들 inet_addr 함수 inet_aton 함수 inet_ntoa 함수 inet_network 함수 inet_lnaof 함수 inet_netof 함수 inet_makeaddr 함수

IP IP 주소 처리주소 처리

Page 21: 주소 변환 함수

21HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

문자열을 32 비트 IP 주소로 변환

unsigned long inet_addr(const char *string);

string-> 32 비트 IP 주소로 변환할 문자열

변환이 성공하면 올바른 IP 주소 반환

만약 실패 하면 INADDR_NONE 반환 errno 에 어떠한 에러 코드도 설정하지 않음

IP IP 주소 처리 주소 처리 - inet_addr(3) - inet_addr(3) 함수함수

Page 22: 주소 변환 함수

22HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

예제 3.3 inetaddr.c

IP IP 주소 처리 주소 처리 - inet_addr(3) - inet_addr(3) 함수 함수 (( 계속계속 ))

초기화

소켓 생성 / 주소 설정

주소 바인드

소켓 주소 출력

Page 23: 주소 변환 함수

23HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

초기화 int z; struct sockaddr_in adr_inet; /* AF_INET */ int len_inet; /* length */ int sck_inet; /* Socket */

소켓 생성sck_inet = socket(AF_INET,SOCK_STREAM,0);

IP IP 주소 처리 주소 처리 - inet_addr(3) - inet_addr(3) 함수함수 (( 계속계속 ))

Page 24: 주소 변환 함수

24HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

주소 설정memset(&adr_inet,0,sizeof adr_inet); // 초기화

adr_inet.sin_family = AF_INET; // 도메인 설정 adr_inet.sin_port = htons(9000); // 포트 설정 adr_inet.sin_addr.s_addr = inet_addr("127.0.0.95");

// 주소 설정

주소 바인드 z = bind(sck_inet, (struct ockaddr*)&adr_inet, len_inet);

소켓 주소 출력 system("netstat -pa --tcp 2>/dev/null| grep inetaddr");

IP IP 주소 처리 주소 처리 - inet_addr(3) - inet_addr(3) 함수함수 (( 계속계속 ))

Page 25: 주소 변환 함수

25HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

실행 결과

tcp 0 0 127.0.0.95:9000 *:* CLOSE 5381/inetaddr

에러 검출 함수static void bail(const char *on_what) { fputs(on_what,stderr); // 문자열을 표준 에러로 출력 fputc('\n',stderr); // 표준 에러에 개행문자 출력 exit(1); // 프로그램 종료}

IP IP 주소 처리 주소 처리 - inet_addr(3) - inet_addr(3) 함수함수 (( 계속계속 ))

Page 26: 주소 변환 함수

26HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

IP 주소 문자열을 32 비트 IP 주소로 변환 int inet_aton(const char *string, struct in_addr *addr);

string-> IP 주소의 문자열

addr -> 변환된 IP 주소로 갱신된 구조체 실패하면 0 이 반환

errno 에 에러 코드 설정 하지 않음 . 성공하면 addr 에 올바른 IP 주소 설정

IP IP 주소 처리 주소 처리 - inet_aton(3) - inet_aton(3) 함수함수

Page 27: 주소 변환 함수

27HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

예제 3.4 inetaton.c

초기화

소켓 생성 / 주소 설정

주소 바인드

소켓 주소 출력

IP IP 주소 처리 주소 처리 - inet_aton(3) - inet_aton(3) 함수 함수 (( 계속계속 ))

Page 28: 주소 변환 함수

28HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

초기화 int z;

struct sockaddr_in adr_inet; /* AF_INET */ int len_inet; /* length */

int sck_inet; /* Socket */

소켓 생성sck_inet = socket(AF_INET,SOCK_STREAM,0);

IP IP 주소 처리 주소 처리 - inet_aton(3) - inet_aton(3) 함수 함수 (( 계속계속 ))

Page 29: 주소 변환 함수

29HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

주소 설정

memset(&adr_inet,0,sizeof adr_inet); // 초기화

adr_inet.sin_family = AF_INET; // 도메인 설정

adr_inet.sin_port = htons(9000); // 포트 설정

// 주소 변환 실패하면 bail 함수 호출

if ( !inet_aton("127.0.0.23", &adr_inet.sin_addr) )

bail("bad address.");

len_inet = sizeof adr_inet; // 길이 설정

IP IP 주소 처리 주소 처리 - inet_aton(3) - inet_aton(3) 함수 함수 (( 계속계속 ))

Page 30: 주소 변환 함수

30HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

주소 바인드z = bind(sck_inet, (struct sockaddr *)&adr_inet, len_inet);

소켓 주소 출력 system("netstat -pa --tcp 2>/dev/null| grep inetaton");

실행결과tcp 0 0 127.0.0.23:9000 *:* CLOSE 5949/inetaton

IP IP 주소 처리 주소 처리 - inet_aton(3) - inet_aton(3) 함수 함수 (( 계속계속 ))

Page 31: 주소 변환 함수

31HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

32 비트 IP 주소를 문자열로 변환

char *inet_ntoa(struct in_addr addr); addr -> 변환할 IP 주소를 저장하고 있는 구조체 성공하면 문자열 IP 주소의 포인터가 반환

내부 변수에 결과를 저장하기 때문에 다음에 호출 되기 전까지만 유효한 결과를 가진다 .

IP IP 주소 처리 주소 처리 - inet_ntoa(3) - inet_ntoa(3) 함수함수

Page 32: 주소 변환 함수

32HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

예제 3.5 inetntoa.c

IP IP 주소 처리 주소 처리 - inet_ntoa(3) - inet_ntoa(3) 함수함수 (( 계속계속 ))

초기화

주소 설정

함수 호출 후 결과 출력

Page 33: 주소 변환 함수

33HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

초기화struct sockaddr_in adr_inet; /* AF_INET */

int len_inet; /* length */

주소 설정memset(&adr_inet,0,sizeof adr_inet); // 구조체 초기화

adr_inet.sin_family = AF_INET; // Domain 설정adr_inet.sin_port = htons(9000); // 포트번호 설정

// 주소 설정 “ 127.0.0.23” -> adr_inet.sin_addr if ( !inet_aton("127.0.0.23",&adr_inet.sin_addr))

puts("bad address.");

IP IP 주소 처리 주소 처리 - inet_ntoa(3) - inet_ntoa(3) 함수함수 (( 계속계속 ))

Page 34: 주소 변환 함수

34HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

함수 호출 및 결과 출력printf("The IP Address is %s\n",inet_ntoa(adr_inet.sin_addr))

실행 결과The IP Address is 127.0.0.23

IP IP 주소 처리 주소 처리 - inet_ntoa(3) - inet_ntoa(3) 함수함수 (( 계속계속 ))

Page 35: 주소 변환 함수

35HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

IP 주소를 32 비트 호스트 순서 값으로 변환

마스크 값을 호스트 비트 혹은 네트워크 비트에 적용 할 때 사용

unsigned long inet_network(const char *addr); addr -> 10 진 IP 주소를 포함하는 문자열 반환값은 호스트 순서 32 비트 IP 주소 실패시 0xFFFFFFFF( 모두 1)

IP IP 주소 처리 주소 처리 - inet_network(3) - inet_network(3) 함수함수

Page 36: 주소 변환 함수

36HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

net_addr =

inet_network("192.168.9.1") & 0xFFFFFF00;

결과 => 0xC0A80900 (10 진수 192.168.9.0)

192.168.9.1 을 16 진수로 변환 -> C0 A8 09 01 C0 A8 09 01 & FF FF FF 00 = C0 A8 09 00

IP IP 주소 처리 주소 처리 - inet_network(3) - inet_network(3) 함수함수 (( 계속계속 ))

Page 37: 주소 변환 함수

37HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

예제 3.6 network.c

IP IP 주소 처리 주소 처리 - inet_network(3) - inet_network(3) 함수함수 (( 계속계속 ))

초기화

함수 호출 후 결과 출력

Page 38: 주소 변환 함수

38HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

초기화 int x; const char *addr[] = {"44.135.86.12", "127.0.0.1",

"172.16.23.95", “192.168.9.1"}; unsigned long net_addr;

함수 호출 후 결과 출력 net_addr = inet_network(addr[x]);

printf("%14s = 0x%08lX net 0x%08lX\n",

addr[x],net_addr, (unsigned long)htonl(net_addr))

※ htonl 함수 : 호스트 순서 주소를 네트워크 순서 주소로 변환

IP IP 주소 처리 주소 처리 - inet_network(3) - inet_network(3) 함수함수 (( 계속계속 ))

Page 39: 주소 변환 함수

39HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

실행 결과44.135.86.12 = 0x2C87560C net 0x0C56872C

127.0.0.1 = 0x7F000001 net 0x0100007F172.16.23.95 = 0xAC10175F net 0x5F1710AC192.168.9.1 = 0xC0A80901 net 0x0109A8C0

IP IP 주소 처리 주소 처리 - inet_network(3) - inet_network(3) 함수함수 (( 계속계속 ))

192.168.9.1 = 0x C0 A8 09 01 net 0x 01 09 A8 C0

C0

A8

09

01

Page 40: 주소 변환 함수

40HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

IP 주소에서 네트워크 ID 부분을 제외한 호스트 ID 부분만을 반환

unsigned long inet_lnaof(struct in_addr addr); addr -> 네트워크 바이트 순서의 IP 주소 반환값 -> addr 의 호스트 ID 부분

IP IP 주소 처리 주소 처리 - inet_lnaof(3) - inet_lnaof(3) 함수함수

Page 41: 주소 변환 함수

41HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

inet_lnaof(3) 함수의 처리 예제

IP IP 주소 처리 주소 처리 - inet_lnaof(3) - inet_lnaof(3) 함수 함수 (( 계속계속 ))

IP 주소 클래스 16 진수값 10진표기법

44.135.86.12

A 0087560C

0.135.86.12

127.0.0.1 A 00000001

0.0.0.1

172.16.23.95

B 0000175F

0.0.23.95

192.168.9.1

C 00000001

0.0.0.144.135.86.12 (10 진수 )2C.87.56.0C (16 진수 )

Page 42: 주소 변환 함수

42HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

Inet_lnaof(3) 함수와 유사

Host ID 대신 네트워크 ID 반환

unsigned long inet_netof(struct in_addr addr);

addr -> 네트워크 바이트 순서의 IP 주소

반환값 -> addr 의 네트워크 ID 부분

IP IP 주소 처리 주소 처리 - inet_netof(3) - inet_netof(3) 함수 함수

Page 43: 주소 변환 함수

43HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

IP 주소 클래스 16 진수값 10진표기법

44.135.86.12

A 0000002C

0.0.0.44

127.0.0.1 A 0000007F

0.0.0.127

172.16.23.95

B 0000AC10

0.0.172.16

192.168.9.1

C 00C0A809

0.192.168.9

inet_netof(3) 함수의 처리 예제

IP IP 주소 처리 주소 처리 - inet_netof(3) - inet_netof(3) 함수 함수 (( 계속계속 ) )

44.135.86.12 (10 진수 )2C.87.56.0C (16 진수 )

Page 44: 주소 변환 함수

44HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

inet_lnaof(3) 함수와 inet_netof(3) 함수가

에서 분리한 네트워크 iD 와 호스트 ID 를

다시 결합하여 원래의 IP 주소를 생성

struct in_addr inet_makeaddr(int net,int host); net -> inet_netof 함수에서 추출한 네트워크 ID host -> inet_lnaof 함수에서 추출한 호스트 ID 반환값 -> 원래의 IP 주소를 저장한 in_addr 구조체

IP IP 주소 처리 주소 처리 - inet_makeaddr(3) - inet_makeaddr(3) 함수 함수

Page 45: 주소 변환 함수

45HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

예제 3.7 makeaddr.c

IP IP 주소 처리 주소 처리 - inet_makeaddr(3)- inet_makeaddr(3) 함수함수 (( 계계속속 ) )

초기화

소켓 생성 / 주소 설정

주소 분리 ( 호스트 ID 와 네트워크 ID) 및 출력

재결합 및 출력

구조체 재초기화

Page 46: 주소 변환 함수

46HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

초기화int x; // for 문의 첨자

struct sockaddr_in adr_inet; /* AF_INET */

// 예제 IP 주소들 const char *addr[] = { "44.135.86.12", "127.0.0.1",

"172.16.23.95", "192.168.9.1" };// 네트워크 ID 와 호스트 ID 를 위한 변수

unsigned long net, hst;

IP IP 주소 처리 주소 처리 - inet_makeaddr(3)- inet_makeaddr(3) 함수함수 (( 계계속속 ) )

Page 47: 주소 변환 함수

47HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

소켓 생성 및 주소 생성memset(&adr_inet,0,sizeof adr_inet); // 메모리 초기화

adr_inet.sin_family = AF_INET; // 도메인 설정

adr_inet.sin_port = htons(9000); // 포트번호 설정

if ( !inet_aton(addr[x],&adr_inet.sin_addr) ) // 주소 생성

puts("bad address.");

※ htonl 함수 : 호스트 순서 주소를 네트워크 순서 주소로 변환

IP IP 주소 처리 주소 처리 - inet_makeaddr(3)- inet_makeaddr(3) 함수함수 (( 계계속속 ) )

Page 48: 주소 변환 함수

48HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

주소 분리 및 출력

// 호스트 ID 추출 hst = inet_lnaof(adr_inet.sin_addr);

// 네트워크 ID 추출net = inet_netof(adr_inet.sin_addr);

// 추출 내용 출력 ( 기존의 IP, 네트워크 ID, 호스트 ID)printf("%14s : net=0x%08lX host=0x%08lX\n", inet_ntoa(adr_inet.sin_addr), net, hst);

IP IP 주소 처리 주소 처리 - inet_makeaddr(3)- inet_makeaddr(3) 함수함수 (( 계계속속 ) )

Page 49: 주소 변환 함수

49HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

구조체 재 초기화 재구성할 IP 주소를 보다 명확히 보여주기

위해서 memset(&adr_inet,0,sizeof adr_inet); // 메모리 초기화

adr_inet.sin_family = AF_INET; // 도메인 설정

adr_inet.sin_port = htons(9000); // 포트번호 설정

IP IP 주소 처리 주소 처리 - inet_makeaddr(3)- inet_makeaddr(3) 함수함수 (( 계계속속 ) )

Page 50: 주소 변환 함수

50HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

주소의 재결합 및 출력 재결합

adr_inet.sin_addr = inet_makeaddr(net,hst);

출력printf("%14s : %s\n\n", "inet_makeaddr",

inet_ntoa(adr_inet.sin_addr));

IP IP 주소 처리 주소 처리 - inet_makeaddr(3)- inet_makeaddr(3) 함수함수 (( 계계속속 ) )

Page 51: 주소 변환 함수

51HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

실행 결과44.135.86.12 : net=0x0000002C host=0x0087560Cinet_makeaddr : 44.135.86.12

127.0.0.1 : net=0x0000007F host=0x00000001inet_makeaddr : 127.0.0.1

172.16.23.95 : net=0x0000AC10 host=0x0000175Finet_makeaddr : 172.16.23.95

192.168.9.1 : net=0x00C0A809 host=0x00000001inet_makeaddr : 192.168.9.1

IP IP 주소 처리 주소 처리 - inet_makeaddr(3)- inet_makeaddr(3) 함수함수 (( 계계속속 ) )

C0 A8 09 01 : C 클래스 주소

Page 52: 주소 변환 함수

52HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

요약요약

함 수 명 개요inet_addr 함수 문자열 IP 주소를 32 비트 IP 주소로 변환

inet_aton 함수 문자열 IP 주소를 32 비트 IP 주소로 변환

inet_ntoa 함수 32 비트 IP 주소를 문자열 IP 주소로 변환

inet_network 함수 IP 주소를 호스트 순서 -> 네트워크 순서로 변환

inet_lnaof 함수 IP 주소에서 호스트 주소 부분 추출

inet_netof 함수 IP 주소에서 네트워크 주소 부분 추출

inet_makeaddr 함수 분리된 호스트 주소와 네트워크 주소를 결합