IP 와 ICMP 의 실험

28
HANNAM Univ. HANNAM Univ. HANNAM Univ. HANNAM Univ. IP IP ICMP ICMP 와 와와 와 와와 Jae-dong kim Jae-dong kim 와와와와 와와와 와와와와 와와와

description

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

Transcript of IP 와 ICMP 의 실험

Page 1: IP 와  ICMP 의 실험

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

IPIP 와 와 ICMPICMP 의 실험의 실험

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

Page 2: IP 와  ICMP 의 실험

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 프로그램 리스트의 해설

Page 3: IP 와  ICMP 의 실험

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

Page 4: IP 와  ICMP 의 실험

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 추측

Page 5: IP 와  ICMP 의 실험

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

Page 6: IP 와  ICMP 의 실험

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 의 라우팅 테이블에 추가된다

Page 7: IP 와  ICMP 의 실험

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

Page 8: IP 와  ICMP 의 실험

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 메시지

Page 9: IP 와  ICMP 의 실험

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

Page 10: IP 와  ICMP 의 실험

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)

Page 11: IP 와  ICMP 의 실험

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)

Page 12: IP 와  ICMP 의 실험

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 의 패킷을 받아도 호스트 루트로서 라우팅테이블에 추가하는 방법이 일반적이 됨

Page 13: IP 와  ICMP 의 실험

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 의 함수 구조도

Page 14: IP 와  ICMP 의 실험

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)소켓을 닫는다

종 료

Page 15: IP 와  ICMP 의 실험

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 의 패킷 작성 처리

Page 16: IP 와  ICMP 의 실험

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 형 배열의 버퍼에

순서대로 저장됨

각 헤드의 포인터를 설정

Page 17: IP 와  ICMP 의 실험

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 헤더를 작성해 둘 필요가 있음

Page 18: IP 와  ICMP 의 실험

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 의 다섯번째 인수에 지정된 어드레스를 기본으로 해서 이루어짐

Page 19: IP 와  ICMP 의 실험

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 의 동작개요

Page 20: IP 와  ICMP 의 실험

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 를 사용하기 때문에 실행시 루트의 권한이 필요함

Page 21: IP 와  ICMP 의 실험

21

Network Lab.Network Lab.

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

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

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

Page 22: IP 와  ICMP 의 실험

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 의 함수 구조도

Page 23: IP 와  ICMP 의 실험

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 처리의 흐름

Page 24: IP 와  ICMP 의 실험

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 의 패킷 작성 처리

Page 25: IP 와  ICMP 의 실험

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 패킷을 작성

Page 26: IP 와  ICMP 의 실험

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 패킷 송신

패킷을 수신한 경우골라냄

Page 27: IP 와  ICMP 의 실험

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

Page 28: IP 와  ICMP 의 실험

28

Network Lab.Network Lab.

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

TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming

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

■ 라우팅 테이블

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

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