IP 와 ICMP 의 실험

Preview:

DESCRIPTION

IP 와 ICMP 의 실험. Jae-dong kim 네트워크 실험실. 목차. 라우팅 테이블과 경로 제어 라우팅 테이블 Redirect 프로그램 redirect 프로그램의 개요와 구조 redirect 프로그램의 사용 방법 redirect 프로그램의 실행 예 redirect 처리의 흐름 redirect 프로그램 리스트의 해설 Scanroute 프로그램 scanroute 의 개요와 구조 scanroute 프로그램의 사용방법 scanroute 처리의 흐름 - PowerPoint PPT Presentation

Citation preview

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

IPIP 와 와 ICMPICMP 의 실험의 실험

Jae-dong kimJae-dong kim네트워크 실험실네트워크 실험실

2

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

목차목차 라우팅 테이블과 경로 제어

■ 라우팅 테이블

Redirect 프로그램■ redirect 프로그램의 개요와 구조■ redirect 프로그램의 사용 방법■ redirect 프로그램의 실행 예■ redirect 처리의 흐름■ redirect 프로그램 리스트의 해설

Scanroute 프로그램■ scanroute 의 개요와 구조■ scanroute 프로그램의 사용방법■ scanroute 처리의 흐름■ scanroute 프로그램 리스트의 해설

3

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

라우팅 테이블과 경로 제어라우팅 테이블과 경로 제어

라우팅 테이블■ netstat -rn : 라우팅 테이블 ( 경로 제어표 ) 을 표시할 수 있음 (r 은 라우팅 테이블을 표시 , n 은 IP 어드레스를 표시할 때의 옵

션 )

Destination : 종착점 주소Gateway : 그 때의 전송처# netstat –rn

Kernel IP routing table

Destination Gateway Genmask Flags MSS Window irtt Iface

192.168.4.0 192.168.3.1 255.255.255.0 UG 0 0 0 eth0192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo0.0.0.0 192.168.3.1 0.0.0.0 UG 0 0 0 eth0

4

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

IP 에서 패킷을 전송할 때 반드시 routing table 이 참조됨 경로상의 모든 Host 나 router 의 routing table 이 정확하여야 함 . 그렇지 않으면 , 패킷이 목적지 호스트까지 도달하지 않음

Redirect program : ICMP redirect message 를 억지로 발생시켜 routing table 변경 Scanroute program : 시작점 Host 와 종착점 Host 사이에 있는 Route 의 I

P 주소를 모두 표시하는 program

라우팅 테이블과 경로 제어라우팅 테이블과 경로 제어

라우팅 테이블 은 :

1) 루트 명령어를 사용해서 수작업으로 편집2) RIP 나 OSPF 등의 Routing Protocol 사용3) ICMP redirect Message 에 의해서 자동적으로 변경

기대효과 : Network 이상발생시 예상가능 및 Unknown Network Topology 추측

5

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램프로그램 (( 개요개요 )) 개요 : ICMP redirect message 를 작성해서 송신하는 program 으로 , 특정 host 의 Routing table 값을 갱신할 수있음(1) 타킷호스트 ( 호스트 B) 에 ICMP redirect message 를 송신

192.168.4.0/24 192.168.3.0/24

가공라우터 B192.168.4.99

호스트 A192.168.4.12

호스트 B192.168.4.14

가공라우터 A192.168.4.1 192.168.3.4

호스트 C192.168.3.104

redirect

2) ICMP redirect 메시지를 송신1) 호스트 B 와호스트 C 사이에서통신가능

호스트 B 의 라우팅 테이블

IP 어드레스 전송선 0.0.0.0/0192.168.4.0/24

192.168.4.1 192.168.4.14

6

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램프로그램 (( 개요개요 ))(2) 타킷호스트 ( 호스트 B) 는 특정의 호스트와 통신불능 예

192.168.4.0/24 192.168.3.0/24

가공라우터 B192.168.4.99

호스트 A192.168.4.12

호스트 B192.168.4.14

가공라우터 A192.168.4.1 192.168.3.4

호스트 C192.168.3.104

4) 호스트 B 는 호스트 C 에 송신하는 패킷을 가공 라우터 B 로 경유해서 보내려고 한다

호스트 B 의 라우팅 테이블

IP 어드레스 전송선 0.0.0.0/0192.168.4.0/24192.168.3.104/32

192.168.4.1 192.168.4.14 192.168.4.99

그림 7.1 ICMP redirect 메시지의 동작

3) 호스트 B 의 라우팅 테이블에 추가된다

7

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램프로그램 (( 사용방법사용방법 ))

■ raw IP 를 사용하고 있기 때문에 실행하기위해 root 의 권한이 필요■ Linux 에서는 redirect 메시지를 수신해도 무시하기 때문에 효과

없으며 , FreeBSD, Windows ME/2000 에서는 동작함

▶ target_host : ICM redirect 메시지의 전송처 IP 어드레스를 지정▶ old_router : redirect 메시지 전송에 사용되는 라우터의 IP ▶ 어드레스를 지정▶ new_router : redirect 앞의 라우터 IP 어드레스를 지정▶ dst_ip : redirect 하는 전송처의 IP 어드레스를 지정

실행 : redirect target_host old_router new_router dst_ip

8

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램프로그램 (( 사용방법사용방법 ))192.168.4.0/24 192.168.3.0/24가공라우터 B192.168.4.99

호스트 A192.168.4.12

호스트 B192.168.4.14 가공라우터 A

192.168.4.1 192.168.3.4

호스트 C192.168.3.104

redirect

new_router target_host old_router dst_ip

V : 4 HL : 5 TOS : TL:ID : 0 F M FO :TTL : P : 1 CKSUM :

SRC IP : 192. 168. 4. 1DST IP : 192. 168. 4. 14T : C : CKSUM :NEXT GW : 192.168.4.99V : HL : TOS : TL:ID : 0 F M FO :TTL : 254 P : CKSUM :

SRC IP : 192. 168. 4. 14DST IP : 192. 168. 3. 104

IP 헤드

반송되는 IP 헤드

ICMP 헤드

transport 헤드의선두 64 비트그림 7.2 명령어 인수와 생성되는 ICMP redirect 메시지

9

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램의 실행 예프로그램의 실행 예 그림 7.2 의 ICMP redirect 패킷을 생성하기위해 입력

ipdump 에서 모니터링하면 다음과같음

# ./redirect 192.168.4.14 192.168.4.1 192.168.4.99 192.168.3.104

Protocol:  IPIV : 4 HL: 5 T: 00000000 Total Length :        56Identfier: 0 FF:0D0 FO:        0

TTL:         2

Pro:        1 Header Checksum: 61285

Source IP Address:                       192.168.4.1Destination IP Address:                     192.168.4.14Protocol: ICMP  (Redirect  (change route))Type:        5

Code:      1 Checksum:           42064

Router IP Address:                         192.168.4.99Protocol:  IPIV : 4 HL: 5 T: 00000000 Total Length :       100

Identfier: 0 FF:0D0 FO:          0

TTL:        2 Pro:      17 Header Checksum: 61378Source IP Address:                         192.168.4.14Destination IP Address:                    192.168.3.104

10

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램의 실행 예프로그램의 실행 예 호스트 B(192.168.4.14) 의 운영체제가 Windows2000 일때 (Before)

11

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램의 실행 예프로그램의 실행 예 라우팅테이블에 192.168.3.104 의 행이 추가 (After)

12

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램의 실행 예프로그램의 실행 예 결과해설 :

■ 호스트 B 는 호스트 C(192.168.3.104) 와 통신을 할 수 없게됨▶ Icmp redirect 메시지가 틀리게 송신되면 통신장애가 발생

라우팅 테이블에 추가되어있는 경로는 Net Mask 가 32 비트 길이의 호스트 루트로 되어 있음

원래는 네트워크 어드레스로 redirect 해야만 효율적임 프로토콜의 방법은 ICMP redirect 의 코드를 0 으로하면 네트워크 redirect 로 됨

▶ 패킷형식을 보면 redirect 하는 네트워크의 서브넷 마스크 필드없음 Class 에서 정의된 비트길이의 네트워크 어드레스로서 redirect 되게됨 Classless 가 일반화된 현재의 인터넷에서는 통신장애를 초래할 위험성 있음

따라서 네트워크 redirect 의 패킷을 받아도 호스트 루트로서 라우팅테이블에 추가하는 방법이 일반적이 됨

13

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 처리의 흐름처리의 흐름■ Redirect 프로그램은 5 개의 함수로 구성됨

main

make_udp_header

(UDP 헤더를 작성한다 )

make_ip_header

(IP 헤더를 작성한다 )

(ICMP redirect 패킷을 작성한다 )

make_icmp5_header

checksum

(checksum 을 계산한다 )

그림 7.3 redirect 의 함수 구조도

14

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 처리의 흐름처리의 흐름 redirect 처리의 흐름 개요

(make_udp_header)UDP 헤더를 작성

(make_ip_header)IP 헤더를 작성

ICMP 헤드를 작성(make_icmp5_header)

그림 7.4 redirect 처리의 흐름

시 작

송신용 RAW 소켓을 연다

헤더의 포인트를 설정

IP 헤더를 작성(make_ip_header)

송신 어드레스의 설정패킷의 송신

(sendto)

(close)소켓을 닫는다

종 료

15

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램 리스트프로그램 리스트 (1)(1)

0 20 28 48 56

redirect

ip_new icmp ip_old udp

buff[1500] IP 헤드 ICMP헤드 IP 헤드 UDP헤드

헤드 구조를 나타내는 구조체로의 포인터 설정

redirect 프로그램 해설

make_udp_header

make_ip_header

make_icmp5_headermake_ip_header

헤드의 작성

Ethernet 헤드 IP 헤드 ICMP 헤드 IP 헤드 UDP헤드

운영체제sendtoraw IP

송신 그림 7.5 redirect 의 패킷 작성 처리

16

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램 리스트프로그램 리스트 (2)(2) redirect 프로그램 해설

80 /* 각 헤더의 포인터 설정 */ 81 /* IP(20) + ICMP(8) + IP(20) + UDP(8) */ 82 ip_new = (struct ip *)(buff); 83 icmp = (struct icmp *)(buff + 20); 84 ip_old = (struct ip *)(buff + 20 + 8); 85 udp = (struct udphdr *)(buff + 20 + 8 + 20); 86 size = 20 + 8 + 20 + 8; ■ 작성한 ICMP 패킷은 4 개의 헤드로 구성되며 , char 형 배열의 버퍼에

순서대로 저장됨

각 헤드의 포인터를 설정

17

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램 리스트프로그램 리스트 (3)(3) redirect 프로그램 해설

88 /* 소켓의 작성 */ 89 make_udp_header(udp); 90 make_ip_header(ip_old, inet_addr(argv[TARGET_IP]), inet_addr(argv[DST_IP]), 91 IPPROTO_UDP, 100); 92 make_icmp5_header(icmp, inet_addr(argv[NEW_ROUTER])); 93 make_ip_header(ip_new, inet_addr(argv[OLD_ROUTER])), 94 inet_addr(argv[TARGET_IP]), IPPROTO_ICMP, size); 95

■ 패킷의 헤더를 작성할 때에는 뒤의 헤더부터 순서대로 작성함 ( 패킷 송신시 상위 층의 헤더나 테이터부터 순서대로 작성하여야 함 )

■ ICMP 헤더에는 ICMP 헤더이하에 계속되는 데이터를 포함한 체크섬을 저장하기 때문에 ICMP 헤더를 작성하기전에 ICMP 헤더 뒤의 IP 헤더나 UDP 헤더를 작성해 둘 필요가 있음

18

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

redirect redirect 프로그램 리스트프로그램 리스트 (4)(4) redirect 프로그램 해설

96 /* 송신 어드레스의 설정 */ 97 memset((char *) &dest, 0, sizeof(dest)); 98 dest.sin_family = AF_INET; 99 dest.sin_addr.s_addr = inet_addr(argv[TARGET_IP]);100 CHKADDRESS(dest.sin_addr.s_addr);101

■ 종착점의 어드레스를 설정하며 , 앞서 작성한 IP 헤더 중에는 종착점 IP 어드레스가 저장되어 있지만 , 패킷을 송신하는 호스트 내부의 라우팅 처리에서는

이용되지 않음

■ 라우팅은 sento 의 다섯번째 인수에 지정된 어드레스를 기본으로 해서 이루어짐

19

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

Scanroute Scanroute 프로그램프로그램

개요 : 통신장애 등이 발생할 때에 자주 이용되며 , 특정 호스트까지의 경로도중에 도중에 있는 라우터를 표시함 ( 실행시 라우터 A,B,C 의 IP 어드레스가 순서대로 표시됨 )

TTL=1

TTL=2

TTL=3

TTL=4

192.168.0.10 192.168.2.4 192.168.3.2 192.168.4.14192.168.0.1

호스트 A 호스트 B라우터 A 라우터 C라우터 B

TTL=0

TTL=1

TTL=2

TTL=3

TTL=0

TTL=1

TTL=2

TTL=0

TTL=1 TTL=0

ICMP 시간 초과메시지시작점 IP 어드레스192.168.0.1

ICMP 시간 초과메시지시작점 IP 어드레스192.168.2.4 ICMP 시간 초과메시지시작점 IP 어드레스

192.168.3.2ICMP 시간 초과메시지시작점 IP 어드레스192.168.4.14

그림 7.6 scanroute 의 동작개요

20

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

scanroute scanroute 프로그램의 사용방법프로그램의 사용방법 scanroute [-n] dst_ip

# ./scanroute –n 192.168.4.14

scanroute 192.168.4.12

1 : 192.168.0.1 : RTT = 0.4930 ms2 : 192.168.2.4 : RTT = 1.0220 ms3 : 192.168.3.2 : RTT = 1.0700 ms4 : 192.168.4.14 : RTT = 2.5320 ms

(dst_ip 는 조사하고 싶은 IP 어드레스를 지정 )

* scanroute 에서는 raw IP 를 사용하기 때문에 실행시 루트의 권한이 필요함

21

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

scanroute scanroute 프로그램의 사용방법프로그램의 사용방법 실행

22

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

scanroute scanroute 처리의 흐름처리의 흐름 (1)(1)

main

make_udp_header

(UDP 헤더를 작성한다 )

make_ip_header

(IP 헤더를 작성한다 )

(tv 구조체의 뺄셈을 한다 )

tvsub

checksum

(checksum 을 계산한다 )

그림 7.7 scanroute 의 함수 구조도

23

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

scanroute scanroute 처리의 흐름처리의 흐름 (2)(2)

그림 7.8 scanroute 처리의 흐름

24

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

scanroute scanroute 프로그램 리스트의 해설프로그램 리스트의 해설 (1)(1)

그림 7.9 scanroute 의 패킷 작성 처리

25

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

scanroute scanroute 프로그램 리스트의 해설프로그램 리스트의 해설 (2)(2) 92 /* UDP/IP 송신용 RAW 소켓 오픈 */ 93 if ((send_sd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) { 94 perror("socket(SOCK_RAW)"); 95 exit (EXIT_FAILURE); 96 } 97 98 if (setsockopt(send_sd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0) { 99 perror("setsockopt(IPPROTO_IP, IP_HDRINCL)");100 exit (EXIT_FAILURE);101 }102103 /* ICMP 수신용 RAW 소켓 오픈 */104 if ((recv_sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) {105 perror("socket(SOCK_RAW)");106 exit (EXIT_FAILURE);107108109 /* UDP/IP 패킷 작성 */110 len = sizeof(struct packet_udp);111 memset((char *)&sendpacket, 0, sizeof(struct packet_udp));112 make_udp_header(&(sendpacket.udp));113 make_ip_header(&(sendpacket.ip), 0, send_sa.sin_addr.s_addr, len);114

ttl 을 변경키위해 raw 소켓을 사용

ICMP 패킷을 수신하기위해raw 소켓 오픈

UDP/IP 패킷을 작성

26

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

scanroute scanroute 프로그램 리스트의 해설프로그램 리스트의 해설 (3)(3)119 for (ttl = 1; ttl <= 64; ttl++) {

123 sendpacket.ip.ip_ttl = ttl;

125 for (i = 0; i < 3; i++) {

126 /* UDP 패킷 송신 */127 if (sendto(send_sd, (char *)&sendpacket, len, 0,128 (struct sockaddr *) &send_sa, sizeof send_sa) < 0) {129 perror("sendto");130 exit (EXIT_FAILURE);131 }

137 tv.tv_sec = 3;138 tv.tv_usec = 0;139 reread;140 /* select 검사한 디스크리프트 설정 */141 FD_ZERO(&readfd);142 FD_SET(recv_sd, &readfd);

144 if ((select(recv_sd + 1, &readfd, NULL, NULL, &tv)) > 0) {

153 if (recvfrom(recv_sd, buff, BUFSIZE, 0, NULL, NULL) < 0) {154 perror("recvfrom");155 exit (EXIT_FAILURE);

ttl 의 값을 1 부터 순서대로 늘림

IP 헤더에 ttl 의 값을 설정

ICMP 메시지가 돌아올 떄의 재송

처리용 Loop

ICMP 패킷수신준비

select 시스템 콜을 사용수신용 raw 소켓이 패킷을수신할 때까지 대기

UDP 패킷 송신

패킷을 수신한 경우골라냄

27

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

scanroute scanroute 프로그램 리스트의 해설프로그램 리스트의 해설 (4)(4)161 if(ip->ip_p !=IPPROTO_ICMP)162 goto reread;163164 icmp = (struct icmp *) (buff + hlen);165166 /* 무한 패킷을 수신하지 않을 것인지 검사 */167 if ((icmp->icmp_type != ICMP_TIMXCEED168 || icmp->icmp_code != ICMP_TIMXCEED_INTRANS)169 && (icmp->icmp_type != ICMP_UNREACH_PORT))170 goto reread;

180 if (dns_flg == OFF)181 printf("%-15s", hostip);182 else if ((host = gethostbyaddr((char *)&ipaddr, 4, AF_INET)) == NULL)183 printf("%-15s (%s) ", hostip, hostip);184 Else 185 printf("%-15s (%s) ", hostip, host->h_name);186187 printf(": RTT =%8.4f ms", tvml.tv_sec*1000.0 + tvml.tv_usec/1000.0);

무한패킷을 수신한 경우무시하기위한 처리

IP 어드레스로부터도메인 명을 조사 및 왕복시간을 계산

190 if (icmp->icmp_type == ICMP_UNREACH_PORT) {

222 udp->uh_dport = htons(33434) ; /*traceroute 포트번호 */

표적 호스트로부터 ICMP 포트도달불능 메시지가 전송되었는지 검사UDP 의 종착점 포트번호를지정32768 +666

28

Network Lab.Network Lab.

HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

요 약요 약 라우팅 테이블과 경로 제어

■ 라우팅 테이블

Redirect 프로그램■ 개요와 구조■ 프로그램의 사용 방법■ 프로그램의 실행 예■ 처리의 흐름■ 해설

Scanroute 프로그램■ 개요와 구조■ 프로그램의 사용방법■ 처리의 흐름■ 해설

Recommended