Presentation is loading. Please wait.

Presentation is loading. Please wait.

ARP의 실험 발표자 : 이직수 jslee@netwk.hannam.ac.kr.

Similar presentations


Presentation on theme: "ARP의 실험 발표자 : 이직수 jslee@netwk.hannam.ac.kr."— Presentation transcript:

1 ARP의 실험 발표자 : 이직수

2 목차 ARP의 개요 ARP의 동작 같은 IP 주소가 있을 때 ARP의 동작 Arpupdate의 개요

3 ARP의 개요 ARP(Address Resolution Protocol)
ARP는 Ethernet이나 토큰링 등의 브로드캐스트형 데이터 링크에 사용되는 프로토콜 IP 어드레스를 검색하는 MAC 어드레스를 검색할 때 사용 IP 패킷을 전송할 때 목적지 물리 주소를 모르는 경우 논리 주소를 이용하여 알아내는 프로토콜 ARP 요구나 응답 패킷은 ARP 테이블을 참조함

4 ARP 개요 ARP 패킷 포맷

5 ARP 개요 ARP 구조체 Struct arphdr{ U_short ar_hrd; /* 하드웨어 주소 포맷 */
U_short ar_pro; /* 프로토콜 주소 포맷 */ U_char ar_hln; /* 하드웨어 주소 길이 */ U_char ar_pln; /* 프로토콜 주소 길이 */ U_short ar_op; /* 오퍼레이션 */ }; Struct ether_arp{ struct arphdr ea_hdr; u_char arp_sha[ETHER_ADDR_LEN]; // 송신자 물리 주소 u_char arp_spa[4]; // 송신자 논리 주소 u_char arp_tha[ETHER_ADDR_LEN]; // 타깃 하드 주소 u_char arp_tpa[4]; // 타깃 논리 주소

6 ARP 개요 ARP 패킷 구조

7 ARP의 동작 호스트 A측

8 ARP의 동작 호스트 B측

9 ARP의 동작 호스트 A는 IP 패킷을 송신하고자 할때 자신의 ARP 테이블 검색
ARP테이블에 타겟 주소가 있으면 패킷을 Ethernet 프레임에 삽입 ARP테이블에 타겟 주소가 없으면 패킷을 ARP 응답 대기 큐에 삽입-ARP 실행 ARP 프로토콜을 실행하여 ARP 요구 패킷을 호스트 B로 전송 호스트 B는 송신된 패킷을 확인하고 자신의 ARP 테이블 갱신 호스트 B는 ARP 응답 패킷을 작성하여 호스트 A로 전송 호스트 A는 수신된 패킷을 확인하고 자신의 ARP 테이블 갱신 호스트 A는 ARP 응답 대기 큐에 있는 IP 패킷을 Ethernet 프레임에 넣어서 목적지 호스트로 전송 => ARP 요구 패킷과 응답 패킷은 두 호스트 간에 ARP 테이블을 갱신한다.

10 ARP의 동작 ARP 테이블

11 같은 IP 주소가 있을 때 ARP 요구 패킷 전송

12 같은 IP 주소가 있을 때 호스트 C 통신 불능

13 arpupdate의 개요 arpupdate의 목적 arp 프로토콜의 기능이나 동작 내용 이해 arp 프로토콜의 문제점 이해
arpupdate는 특정 IP 주소를 갖는 호스트를 3가지 방법으로 통신 불능 상태로 만듦

14 arpupdate의 개요

15 arpupdate의 개요 호스트 D는 타깃 호스트인 C를 찾기 위해 ARP 요구 패킷을 브로드캐스트 함
호스트 A는 네트워크 내에서 ARP 요구 패킷을 모니터링 함 호스트 C가 ARP 요구 패킷에 대해 응답함 호스트 A는 arpupdate가 작성한 패킷을 호스트 D로 전송 호스트 D는 ARP 테이블에 잘못된 주소를 갱신함 호스트 D는 통신 불가능 상태가 됨

16 arpupdate의 개요

17 arpupdate의 개요

18 arpupdate의 개요

19 arpupdate 함수 구조도

20 arpupdate 처리 흐름

21 arpupdate 프로그램 리스트

22 arpupdate 프로그램 리스트 명령어 인수 해석, 옵션 설정 명령어 인수로부터 IP 주소와 MAC 주소 넣음
flag = NORMAL; if(argc == 5) if(strcmp(argv[OPTION], "reply") == 0) flag = REPLY; else if (strcmp(argv[OPTION], "request") == 0) flag = REQUEST; else { help(argv[CMD_NAME]); return EXIT_FAILURE; } } else if ((argc != 4) { help(argv[CMD_NAME]); return EXIT_FAILURE; } strcpy(ifname, argv[IFNAME]); dst_ip = inet_addr(argv[DST_IP]); if ((sscanf(argv[MAC_ADDR], "%x:%x:%x:%x:%x:%x", &tmp[0], &tmp[1], &tmp[2], &tmp[3], &tmp[4], &tmp[5]) !=6) { printf("MAC Address error %s\n", argv[MAC_ADDR]); return EXIT_FAILURE; }

23 arpupdate 프로그램 리스트 데이터 링크 액세스 인터페이스 열기
if((s=socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ALL))) < 0) { perror("socket"); return EXIT_FAILURE; } memset(&sa, 0, sizeof sa); sa.sa_family = PF_PACKET; strcpy(sa.sa_data, ifname); if(bind(s, &sa, sizeof sa)<0){ perror("bind"); if((s=open_bpf(ifname))<0) return EXIT_FAILURE; bpf_len=0;

24 arpupdate 프로그램 리스트 MAC 주소 타입 검사 Reply 설정 처리 Request 설정 처리
if ((memcmp (eth->ether_dhost, mac_addr, 6) != 0 && memcmp(eth->ether_shost, mac_addr, 6) !=0 && ntohs(eth->ether_type) == ETHERTYPE_ARP){ make_arp((struct ether_arp *)sp, ARPOP_REPLY, mac_addr, arp->arp_tpa, arp->arp_sha, arp->arp_spa); make_ethernet((struct ether_header *)send_buff, arp->arp_sha, mac_addr, ETHERTYPE_ARP); make_arp((struct ether_arp *)sp, ARPOP_REQUEST, mac_addr, arp->arp_spa, zero, arp->arp_tpa); make_ethernet((struct ether_header *)send_buff, arp->arp_sha, mac_addr, ETHERTYPE_ARP);

25 arpupdate 실행 예 - reply

26 arpupdate 실행 예 - request

27 arpupdate 실행 예 - normal

28 Thank you… Q & A


Download ppt "ARP의 실험 발표자 : 이직수 jslee@netwk.hannam.ac.kr."

Similar presentations


Ads by Google