IP와 ICMP의 실험 Jae-dong kim 네트워크 실험실.

Slides:



Advertisements
Similar presentations
엑셀리포트를 이용한 날짜별 리포트 자동 저장 방법
Advertisements

컴퓨터와 인터넷.
12장. Raw 소켓 Raw 소켓의 특징과 사용 방법을 익힌다. Ping 프로그램의 동작 원리를 이해하고 작성 방법을 익힌다.
Network Lab. Young-Chul Hwang
제 8 장 Traceroute 프로그램.
김 지 현 기초부터 배우는 TCP/IP 네트워크 제2장 TCP/IP 프로토콜과 헤더의 구조 김 지 현
Chapter 2. IP Address IP Address의 구성에 대한 자세한 설명과 함께 IP Address를 효율적으로 관리하기 위한 방법인 서브넷팅, 수퍼넷팅, VLSM 등에 대해서 단계별로 접근할 수 있다. 몇가지 예제를 통해서 서브넷팅에 대한 개념을 정리하고.
제 7장 정적 라우팅 프로토콜.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
24 장 TCP/IP 24.1 개요 24.2 네트워크층 24.3 주소 지정 24.4 서브넷팅틍
Chapter 03. 소켓 주소 구조체 다루기.
TCP/IP Network Experimental Programming [TCP의 실험]
TCP/IP Network Experimental Programming [패킷 모니터링 실험]
Chapter 11. Raw 소켓.
ARP의 실험 발표자 : 이직수
VoIP (Voice Over Internet Protocol)
제 14장 Multicast & Broadcast
Internet Control Message Protocol Version 4 (ICMPv4)
TCP/IP 네트워크 제 9장 IP 라우팅 정보통신연구실.
제 9 장 IP 라우팅.
Chapter 21 Network Layer: ARP, ICMP (IGMP).
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Chapter 06. UDP 서버/클라이언트.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
10 장 데이터 링크 제어(Data Link Control)
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
Chapter 03. 소켓 주소 구조체 다루기.
GPRS(general Packet Radio System) 설명
Socket Address Structure and Byte Ordering Functions
Socket Address Structure and Byte Ordering Functions
뇌를 자극하는 Windows Server 장. 장애 조치 클러스터.
Chapter 5 UDP Socket 소켓 프로그래밍.
Chapter 19 솔라리스 네트워크 관리 Solaris1 . TCP/IP 개요
WOL(Wake-On Lan) 컴퓨터공학과 4학년 박기웅.
Chapter 07. 소켓 옵션.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
Part 라우터 1. 라우터 장비의 이해 2. 라우터 네트워크 환경 설정 3. 라우팅 테이블 설정과 점검.
제 15 장 BOOTP와 DHCP BOOTP 15.2 동적 호스트 설정 프로토콜.
ACL(Access Control List)
9 TCP의 이해 학습 목표 전송 계층 프로토콜이 제공하는 기능을 이해한다.
16 장 네트워크 보안 : 방화벽과 VPN 16.1 개요 16.2 기밀성 16.3 전자 서명 16.4 인터넷 보안
Network 네트워크 이론 및 실습 TCP / IP 4장.
10 장 데이터 링크 제어(Data Link Control)
10 장 데이터 링크 제어(Data Link Control)
10 기타 전송 계층 프로토콜.
Chapter 26 IP over ATM.
Ping Test.
Addressing the Network – IPv4
Chapter 27 Mobile IP.
라우터의 이해 (보충자료) TCP/IP구성 Ping명령어를 이용한 연결검사 비트와 바이트 10진수/2진수/16진수
통신프로토콜 전산정보학부 모바일인터넷과 권 춘 우
Chapter 04. TCP 서버/클라이언트.
7 IP 프로토콜의 이해 학습 목표 네트워크 계층의 필요성과 역할을 이해한다.
제 13 장 인터넷 그룹 관리 프로토콜 정보통신연구실.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
제 6 장 IP 패킷 전달과 라우팅 6.1 연결형 서비스와 비연결형 서비스 6.2 직접 전달과 간접 전달 6.3 라우팅 방법
5.2.3 교환방식의 비교 학습내용 교환방식의 비교.
9 브라우저 객체 모델.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
Part 05 TCP/IP 1. 네트워크 2. 포트번호.
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
4. IP 데이터그램과 라우팅 (6장. 인터넷과 IP) IP 데이터그램 : 특정 물리망에 종속되지 않은 가상의 패킷 형식.
 6장. SQL 쿼리.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
7 생성자 함수.
6 객체.
ARP.
Presentation transcript:

IP와 ICMP의 실험 Jae-dong kim 네트워크 실험실

목차 라우팅 테이블과 경로 제어 Redirect 프로그램 Scanroute 프로그램 라우팅 테이블

라우팅 테이블과 경로 제어 라우팅 테이블 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 eth0 192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.3.1 0.0.0.0 UG 0 0 0 eth0

라우팅 테이블과 경로 제어 IP에서 패킷을 전송할 때 반드시 routing table이 참조됨 경로상의 모든 Host나 router의 routing table이 정확하여야 함. 그렇지 않으면, 패킷이 목적지 호스트까지 도달하지 않음 Redirect program : ICMP redirect message를 억지로 발생시켜 routing table 변경 Scanroute program : 시작점 Host와 종착점 Host 사이에 있는 Route의 IP 주소를 모두 표시하는 program 라우팅 테이블 은 : 1) 루트 명령어를 사용해서 수작업으로 편집 2) RIP나 OSPF 등의 Routing Protocol 사용 3) ICMP redirect Message에 의해서 자동적으로 변경 기대효과 : Network 이상발생시 예상가능 및 Unknown Network Topology 추측

redirect 프로그램(개요) 개요 : ICMP redirect message를 작성해서 송신하는 program으로, 특정 host의 Routing table 값을 갱신할 수있음 (1) 타킷호스트(호스트 B)에 ICMP redirect message를 송신 192.168.4.0/24 192.168.3.0/24 호스트 B의 라우팅 테이블 IP 어드레스 전송선 0.0.0.0/0 192.168.4.0/24 192.168.4.1 192.168.4.14 호스트 A 192.168.4.12 호스트 B 192.168.4.14 호스트 C 192.168.3.104 가공라우터 B 192.168.4.99 가공라우터 A 192.168.4.1 192.168.3.4 redirect 1) 호스트 B와 호스트 C 사이에서 통신가능 2) ICMP redirect 메시지를 송신

redirect 프로그램(개요) (2) 타킷호스트(호스트 B)는 특정의 호스트와 통신불능 예 192.168.4.0/24 192.168.3.0/24 호스트 B의 라우팅 테이블 IP 어드레스 전송선 0.0.0.0/0 192.168.4.0/24 192.168.3.104/32 192.168.4.1 192.168.4.14 192.168.4.99 3) 호스트 B의 라우팅 테이블에 추가된다 호스트 A 192.168.4.12 호스트 B 192.168.4.14 호스트 C 192.168.3.104 가공라우터 B 192.168.4.99 가공라우터 A 192.168.4.1 192.168.3.4 4) 호스트 B는 호스트 C에 송신하는 패킷을 가공 라우터 B로 경유해서 보내려고 한다 그림 7.1 ICMP 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

그림 7.2 명령어 인수와 생성되는 ICMP redirect 메시지 192.168.4.0/24 192.168.3.0/24 호스트 A 192.168.4.12 호스트 B 192.168.4.14 가공라우터 B 192.168.4.99 호스트 C 192.168.3.104 가공라우터 A 192.168.4.1 192.168.3.4 redirect new_router old_router dst_ip target_host V : 4 HL : 5 TOS : TL: ID : 0 F M FO : TTL : P : 1 CKSUM : IP 헤드 SRC IP : 192. 168. 4. 1 DST IP : 192. 168. 4. 14 T : C : CKSUM : ICMP 헤드 NEXT GW : 192.168.4.99 V : HL : TOS : TL: ID : 0 F M FO : TTL : 254 P : CKSUM : 반송되는 IP 헤드 SRC IP : 192. 168. 4. 14 DST IP : 192. 168. 3. 104 transport 헤드의 선두 64비트 그림 7.2 명령어 인수와 생성되는 ICMP 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:  IP IV : 4 HL: 5 T: 00000000 Total Length :        56 Identfier:                    0 FF:0D0 FO:        0 TTL:         2 Pro:        1 Header Checksum: 61285 Source IP Address:                       192.168.4.1 Destination IP Address:                     192.168.4.14 Protocol: ICMP  (Redirect  (change route)) Type:        5 Code:      1 Checksum:           42064 Router IP Address:                         192.168.4.99 IV : 4 HL: 5 Total Length :       100 Identfier:                   0 FO:          0 TTL:        2 Pro:      17 Header Checksum: 61378 Source IP Address:                         192.168.4.14 Destination IP Address:                    192.168.3.104

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

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

redirect 프로그램의 실행 예 결과해설 : 호스트 B는 호스트 C(192.168.3.104)와 통신을 할 수 없게됨 Icmp redirect 메시지가 틀리게 송신되면 통신장애가 발생 라우팅 테이블에 추가되어있는 경로는 Net Mask가 32비트 길이의 호스트 루트로 되어 있음 원래는 네트워크 어드레스로 redirect 해야만 효율적임 프로토콜의 방법은 ICMP redirect의 코드를 0으로하면 네트워크 redirect로 됨 패킷형식을 보면 redirect하는 네트워크의 서브넷 마스크 필드없음 Class에서 정의된 비트길이의 네트워크 어드레스로서 redirect 되게됨 Classless가 일반화된 현재의 인터넷에서는 통신장애를 초래할 위험성 있음 따라서 네트워크 redirect의 패킷을 받아도 호스트 루트로서 라우팅테이블에 추가하는 방법이 일반적이 됨

(ICMP redirect 패킷을 작성한다) make_udp_header (UDP 헤더를 작성한다) main make_ip_header (IP 헤더를 작성한다) checksum make_icmp5_header (checksum을 계산한다) (ICMP redirect 패킷을 작성한다) 그림 7.3 redirect의 함수 구조도

redirect 처리의 흐름 redirect 처리의 흐름 개요 시 작 IP 헤더를 작성 송신용 RAW 소켓을 연다 시 작 IP 헤더를 작성 송신용 RAW 소켓을 연다 (make_ip_header) 헤더의 포인트를 설정 송신 어드레스의 설정 UDP 헤더를 작성 패킷의 송신 (make_udp_header) (sendto) IP 헤더를 작성 소켓을 닫는다 (make_ip_header) (close) ICMP 헤드를 작성 종 료 (make_icmp5_header) 그림 7.4 redirect 처리의 흐름

redirect 프로그램 리스트(1) redirect 프로그램 해설 그림 7.5 redirect의 패킷 작성 처리 ip_new icmp ip_old udp 헤드 구조를 나타내는 구조체로의 포인터 설정 20 28 48 56 buff [1500] ICMP 헤드 UDP 헤드 IP 헤드 IP 헤드 make_udp_header make_ip_header 헤드의 작성 make_icmp5_header make_ip_header raw IP sendto 운영체제 Ethernet 헤드 ICMP 헤드 UDP 헤드 IP 헤드 IP 헤드 송신 그림 7.5 redirect의 패킷 작성 처리

redirect 프로그램 리스트(2) redirect 프로그램 해설 80 /* 각 헤더의 포인터 설정 */ 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형 배열의 버퍼에 순서대로 저장됨 각 헤드의 포인터를 설정

redirect 프로그램 리스트(3) redirect 프로그램 해설 89 make_udp_header(udp); 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헤더를 작성해 둘 필요가 있음

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

Scanroute 프로그램 개요 : 통신장애 등이 발생할 때에 자주 이용되며, 특정 호스트까지의 경로도중에 도중에 있는 라우터를 표시함 (실행시 라우터 A,B,C의 IP 어드레스가 순서대로 표시됨) 호스트 B 호스트 A 라우터 A 라우터 B 라우터 C 192.168.0.10 192.168.0.1 192.168.2.4 192.168.3.2 192.168.4.14 ICMP 시간 초과 메시지 시작점 IP 어드레스 192.168.0.1 TTL=1 TTL=0 TTL=2 ICMP 시간 초과 메시지 시작점 IP 어드레스 192.168.2.4 TTL=1 TTL=0 중간에 있는 라우터의 어드레스 조사는 호스트 A로부터 호스트 B로 IP헤드의 TTL을 1로 설정하고 UDP에 패킷을 송신 패킷을 라우터 A가 전송하려고 할 때, TTL은 0이 되고 폐기됨. 이 때 ICMP 시간초과메시지를 수신하는 것으로 가장 가까운 IP 어드레스를 알 수 있음 이같은 방법을 반복하여 도중 라우터의 IP 어드레스를 알 수 있음 종착점 IP 어드레스에 도착할 때에는 ICMP 시간초과 메시지는 회신되지 않지만, scanport_udpa와 같이 사용치 않은 호스트 번호를 향해 패킷을 송신하면 ICMP 포트도달 불가능 메시지가 돌아옴(이 기능은 네트워크 이상이 발생될 경우 매우 도움이 되는 기능이지만 네트워크 스캔에 이용될 가능성도 있으며, 이를 기초로 네트워크의 구조를 조사하고 공격의 자료로 활용하는 이들도 있음 ICMP 시간 초과 메시지 시작점 IP 어드레스 192.168.3.2 TTL=3 TTL=0 TTL=1 TTL=2 ICMP 시간 초과 메시지 시작점 IP 어드레스 192.168.4.14 TTL=4 TTL=0 TTL=1 TTL=3 TTL=2 그림 7.6 scanroute의 동작개요

* scanroute에서는 raw IP를 사용하기 때문에 실행시 루트의 권한이 필요함 scanroute [-n] dst_ip (dst_ip는 조사하고 싶은 IP어드레스를 지정) * scanroute에서는 raw IP를 사용하기 때문에 실행시 루트의 권한이 필요함 # ./scanroute –n 192.168.4.14 scanroute 192.168.4.12 1 : 192.168.0.1 : RTT = 0.4930 ms 2 : 192.168.2.4 : RTT = 1.0220 ms 3 : 192.168.3.2 : RTT = 1.0700 ms 4 : 192.168.4.14 : RTT = 2.5320 ms

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

scanroute 처리의 흐름(1) main make_udp_header (UDP 헤더를 작성한다) make_ip_header checksum tvsub (checksum을 계산한다) (tv 구조체의 뺄셈을 한다) tvsub 함수는 패킷의 왕복시간의 계산에 사용함 그림 7.7 scanroute의 함수 구조도

scanroute 처리의 흐름(2) 그림 7.8 scanroute처리의 흐름 ttl의 값을 1부터 순서대로 크게 하면서 udp에 패킷을 송신하고 select에서 icmp 패킷이 돌아오는지 안오는지 기다림 Icmp 시간초과 메시지가 돌아오면 중간에 있는 라우터로 판단함 Icmp port도달불능 메시지가 돌아오면 목적호스트에 패킷이 도달하게 되며 프로그램을 종료함 그림 7.8 scanroute처리의 흐름

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

scanroute 프로그램 리스트의 해설(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 } 102 103 /* ICMP 수신용 RAW 소켓 오픈 */ 104 if ((recv_sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) { 105 perror("socket(SOCK_RAW)"); exit (EXIT_FAILURE); 107 108 109 /* 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패킷 을 작성

scanroute 프로그램 리스트의 해설(3) ttl의 값을 1부터 순서 대로 늘림 119 for (ttl = 1; ttl <= 64; ttl++) { sendpacket.ip.ip_ttl = ttl; for (i = 0; i < 3; i++) { /* 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); } 137 tv.tv_sec = 3; 138 tv.tv_usec = 0; 139 reread; 140 /* select 검사한 디스크리프트 설정 */ 141 FD_ZERO(&readfd); 142 FD_SET(recv_sd, &readfd); 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); IP헤더에 ttl의 값을 설정 ICMP 메시지가 돌아올 떄의 재송 처리용 Loop UDP 패킷 송신 ICMP패킷 수신준비 select 시스템 콜을 사용 수신용 raw 소켓이 패킷을 수신할 때까지 대기 패킷을 수신한 경우 골라냄

scanroute 프로그램 리스트의 해설(4) 161 if(ip->ip_p !=IPPROTO_ICMP) 162 goto reread; 163 164 icmp = (struct icmp *) (buff + hlen); 165 166 /* 무한 패킷을 수신하지 않을 것인지 검사 */ 167 if ((icmp->icmp_type != ICMP_TIMXCEED 168 || icmp->icmp_code != ICMP_TIMXCEED_INTRANS) 169 && (icmp->icmp_type != ICMP_UNREACH_PORT)) 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); 186 187 printf(": RTT =%8.4f ms", tvml.tv_sec*1000.0 + tvml.tv_usec/1000.0); 무한패킷을 수신한 경우 무시하기위한 처리 IP 어드레스로부터 도메인 명을 조사 및 왕복시간을 계산 표적 호스트로부터 ICMP 포트도달 불능 메시지가 전송되었는지 검사 if (icmp->icmp_type == ICMP_UNREACH_PORT) { 222 udp->uh_dport = htons(33434) ; /*traceroute 포트번호 */ UDP의 종착점 포트번호를 지정 32768 +666

요 약 라우팅 테이블과 경로 제어 Redirect 프로그램 Scanroute 프로그램 라우팅 테이블 개요와 구조 프로그램의 사용 방법 프로그램의 실행 예 처리의 흐름 해설 Scanroute 프로그램 프로그램의 사용방법