12장. Raw 소켓 Raw 소켓의 특징과 사용 방법을 익힌다. Ping 프로그램의 동작 원리를 이해하고 작성 방법을 익힌다.

Slides:



Advertisements
Similar presentations
Internet Protocol Version4
Advertisements

Network Lab. Byoung-Son, Choi
윈도우 네트워크 프로그래밍 √ 원리를 알면 IT가 맛있다 TCP/IP 소켓 프로그래밍 광주대학교 정보통신학과 조 정 호.
Next Generation: IPv6 and ICMPv6
차세대 IPv6와 ICMPv 데이터그램 25.2 단편화 25.3 옵션 25.4 검사합 25.5 IP 설계
TCP/IP Network Experimental Programming [IPv6에 의한 통신 실험]
암호화 기술(SSL, IPSec) 손재성 권기읍 안복선 최준혁
IPsec 석진선.
TCP/IP Socket Cover Slide 조태문.
Network Lab. Young-Chul Hwang
Department of Computer Science and Engineering
김 지 현 기초부터 배우는 TCP/IP 네트워크 제2장 TCP/IP 프로토콜과 헤더의 구조 김 지 현
20 장 네트워크층 프로토콜 : ARP, IPv4, ICMP, IPv6, ICMPv6
제 9 장 ICMP 목원대학교 정보통신공학과 이 명 선.
Internet Control Message Protocol (ICMP)
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
TCP/IP Socket Cover Slide 조태문.
24 장 TCP/IP 24.1 개요 24.2 네트워크층 24.3 주소 지정 24.4 서브넷팅틍
Chapter 03. 소켓 주소 구조체 다루기.
Network Lab. Seoung Hyeon, Lee
Multimedia & Mobile Communications Lab.
Chapter 11. Raw 소켓.
ARP의 실험 발표자 : 이직수
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
(Next Generation Internet Protocol)
제 14장 Multicast & Broadcast
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science
Socket Address Structure and Byte Ordering Functions
IP.
Chapter 21 Network Layer: ARP, ICMP (IGMP).
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Socket Address Structure and Byte Ordering Functions
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
Chapter 12. 직렬 통신과 무선 프로토콜.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
ARP Project 조 충 호 교수님 김 세 진 조교님 조 진 형 변 익 수
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
Chapter 03. 소켓 주소 구조체 다루기.
Socket Address Structure and Byte Ordering Functions
Socket Address Structure and Byte Ordering Functions
UDP Test 프로그램 분석.
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Chapter 5 UDP Socket 소켓 프로그래밍.
Chapter 07. 소켓 옵션.
IPv 이 동 주 HONGIK UNIVERSITY.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
제 15 장 BOOTP와 DHCP BOOTP 15.2 동적 호스트 설정 프로토콜.
9 TCP의 이해 학습 목표 전송 계층 프로토콜이 제공하는 기능을 이해한다.
TCP/IP 인터네트워킹 INTERNETWORKING with TCP/IP <vol
8 네트워크 계층 프로토콜 학습 목표 IPv6의 필요성과 헤더 구조를 이해한다. 이동 IP 프로토콜의 터널링 원리를 이해한다.
2 네트워크 모델 학습 목표 모듈 개념을 알아보고 계층 구조의 필요성을 이해한다.
10 기타 전송 계층 프로토콜.
Chapter 26 IP over ATM.
TCP/IP 인터네트워킹 INTERNETWORKING with TCP/IP <vol
Chapter 27 Mobile IP.
통신프로토콜 전산정보학부 모바일인터넷과 권 춘 우
Chapter 04. TCP 서버/클라이언트.
7 IP 프로토콜의 이해 학습 목표 네트워크 계층의 필요성과 역할을 이해한다.
제 13 장 인터넷 그룹 관리 프로토콜 정보통신연구실.
Chapter 02. 윈도우 소켓 시작하기.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
4. IP 데이터그램과 라우팅 (6장. 인터넷과 IP) IP 데이터그램 : 특정 물리망에 종속되지 않은 가상의 패킷 형식.
Network Lab. Young-Chul Hwang
6. 오류 보고 체계 (ICMP) (6장. 인터넷과 IP)
ARP.
Presentation transcript:

12장. Raw 소켓 Raw 소켓의 특징과 사용 방법을 익힌다. Ping 프로그램의 동작 원리를 이해하고 작성 방법을 익힌다. Traceroute 프로그램의 동작 원리를 이해하고 작성 방법을 익힌다. ICMP.DLL이 제공하는 함수를 활용하는 방법을 익힌다.

개요 (1) TCP(또는 UDP) 소켓 vs. Raw 소켓 데이터 응용 프로그램 운영체제 프로토콜 헤더 데이터 응용 프로그램 TCP/IP 윈도우 소켓 프로그래밍

개요 (2) Raw 소켓의 특징 응용 프로그램 수준에서 프로토콜 헤더를 직접 조작  기존의 TCP 또는 UDP 소켓을 사용하는 방식보다 세부적인 제어 가능 프로토콜 헤더의 구조와 동작 원리를 이해해야 하므로 프로그래밍이 상대적으로 어려움 해킹에 악용할 가능성이 있음 TCP/IP 윈도우 소켓 프로그래밍

Raw 소켓 생성 (1) Raw 소켓 생성 예 Raw 소켓의 종류 SOCKET sock = socket(AF_INET, SOCK_RAW, protocol); if(sock == INVALID_SOCKET) err_quit("socket()"); 프로토콜 번호 응용 프로그램이 생성할 헤더 운영체제가 IPPROTO_ICMP ICMPv4 IPv4 IPPROTO_IGMP IGMPv4 IPPROTO_ICMPV6 ICMPv6 IPv6 TCP/IP 윈도우 소켓 프로그래밍

Raw 소켓 생성 (2) IP_HDRINCL 또는 IPV6_HDRINCL 옵션 설정 #include <ws2tcpip.h> ... // IPv4 헤더 포함 옵션 설정 BOOL optval = TRUE; setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&optval, sizeof(optval)); #include <ws2tcpip.h> ... // IPv6 헤더 포함 옵션 설정 BOOL optval = TRUE; setsockopt(sock, IPPROTO_IPV6, IPV6_HDRINCL, (char *)&optval, sizeof(optval)); TCP/IP 윈도우 소켓 프로그래밍

Raw 소켓 생성 (3) Raw 소켓 생성 시 주의 사항 운영체제마다 Raw 소켓을 생성할 수 있는 권한이 다름 윈도우 9x 계열(95/98/Me) 모든 사용자 윈도우 NT 계열(NT 4.0/2000/XP 이상) 관리자 그룹에 속한 사용자 운영체제마다 생성할 수 있는 Raw 소켓의 종류가 다름 윈도우 95/98/NT 4.0 IPPROTO_ICMP, IPPROTO_IGMP 윈도우 Me/2000 모든 종류의 IPv4 Raw 소켓 윈도우 XP SP1 이상 모든 종류의 IPv4와 IPv6 Raw 소켓 TCP/IP 윈도우 소켓 프로그래밍

Options(If any) + Padding Destination IP Address Raw 소켓 입출력 (1) IPv4 패킷 구조 Options(If any) + Padding 데이터 Version Hlen Type of Service Total Length Identification Flags Fragment Offset Time to Live Protocol Header Checksum Source IP Address Destination IP Address 0 3 4 7 8 15 16 18 19 31 20 바이트 가변 길이 TCP/IP 윈도우 소켓 프로그래밍

Raw 소켓 입출력 (2) IPv4 패킷 정의 typedef struct _IPHEADER { u_char ip_hl:4; // header length u_char ip_v:4; // version u_char ip_tos; // type of service short ip_len; // total length u_short ip_id; // identification short ip_off; // flags & fragment offset field u_char ip_ttl; // time to live u_char ip_p; // protocol u_short ip_cksum; // checksum IN_ADDR ip_src; // source address IN_ADDR ip_dst; // destination address } IPHEADER; TCP/IP 윈도우 소켓 프로그래밍

Raw 소켓 입출력 (3) Raw 소켓 출력(IPv4 기준) 일반적으로 sendto() 함수를 사용한다. 이때 목적지 주소로 브로드캐스트 주소나 멀티캐스트 주소를 사용할 수도 있다. IP_HDRINCL 옵션을 설정하지 않은 경우, socket() 함수의 세 번째 인자에 해당하는 프로토콜 헤더를 생성하고 여기에 응용 프로그램 데이터를 덧붙여 보낸다. 이때 IPv4 헤더는 운영체제가 자동으로 생성해 덧붙인다. IP_HDRINCL 옵션을 설정한 경우, IPv4 헤더와 socket() 함수의 세 번째 인자에 해당하는 프로토콜 헤더를 생성하고 여기에 응용 프로그램 데이터를 덧붙여 보낸다. 즉, 응용 프로그램이 IPv4 헤더를 포함한 패킷 전체를 생성해 보내는 것이다. IP_HDRINCL 옵션을 설정했더라도 IPv4 헤더의 Identification을 0으로 채우면 운영체제가 자동으로 Identification 번호를 설정해준다. TCP/IP 윈도우 소켓 프로그래밍

Raw 소켓 입출력 (4) Raw 소켓 입력 일반적으로 recvfrom() 함수를 사용한다. IPv4의 경우에는 IP_HDRINCL 옵션 사용 여부와 관계없이 데이터 맨 앞쪽에 항상 IPv4 헤더가 포함되어 읽힌다. IPv6의 경우에는 IPV6_HDRINCL 옵션 사용 여부와 관계없이 항상 IPv6 헤더 다음 부분부터만 읽을 수 있다. 운영체제는 IP 패킷을 받으면 프로토콜이 일치하는 모든 Raw 소켓에 이 패킷을 전달한다. 여기서 프로토콜이 일치한다는 것은 IP 패킷의 Protocol 부분과 Raw 소켓 생성 시 socket() 함수에 전달한 세 번째 인자가 일치한다는 뜻이다. TCP/IP 윈도우 소켓 프로그래밍

Ping (1) Ping 응용 프로그램 호스트나 라우터의 작동 여부를 확인할 때 사용 ICMP 프로토콜을 이용하여 구현 TCP/IP 윈도우 소켓 프로그래밍

Ping (2) ICMP 인터넷에 연결된 호스트나 라우터 간에 유용한 정보(오류 발생, 라우팅 정보 등)를 알리는 목적으로 사용 항상 IP 패킷에 포함된 형태로 전송되며 TCP/IP 프로토콜 동작에 필수 역할을 함 IP 헤더 ICMP 메시지 TCP/IP 윈도우 소켓 프로그래밍

Type과 Code에 따라 달라지는 부분(가변 길이) Ping (3) ICMP 메시지 구조 ICMP 메시지 정의 Type Code Checksum Type과 Code에 따라 달라지는 부분(가변 길이) 0 7 8 15 16 31 typedef struct _ICMPMESSAGE { u_char icmp_type; // type of message u_char icmp_code; // type sub code u_short icmp_cksum; // checksum ... } ICMPMESSAGE; TCP/IP 윈도우 소켓 프로그래밍

Ping (4) Ping 응용 프로그램 동작 원리 에코 요청, 에코 응답 ICMP 메시지 ping A A 에코 요청 에코 응답 Type(8 또는 0) Code(0) Checksum 옵션 데이터(가변 길이) 0 7 8 15 16 31 Identifier Sequence Number TCP/IP 윈도우 소켓 프로그래밍

Ping (5) 에코 요청, 에코 응답 ICMP 메시지 정의 typedef struct _ICMPMESSAGE { u_char icmp_type; // type of message u_char icmp_code; // type sub code u_short icmp_cksum; // checksum u_short icmp_id; // identifier u_short icmp_seq; // sequence number ... // 옵션 데이터 } ICMPMESSAGE; TCP/IP 윈도우 소켓 프로그래밍

Traceroute (1) Traceroute 응용 프로그램 호스트나 라우터까지의 IP 패킷 전달 경로를 확인 ICMP 프로토콜을 이용하여 구현 TCP/IP 윈도우 소켓 프로그래밍

Traceroute (2) Traceroute 동작 원리 에코 요청(TTL=1) tracert A 라우터 1 시간 초과 라우터 2 에코 요청(TTL=n) 라우터 n-1 ... 에코 응답 A TCP/IP 윈도우 소켓 프로그래밍

Traceroute (3) IP_TTL 또는 IPV6_UNICAST_HOPS 옵션 설정 #include <ws2tcpip.h> ... // IPv4의 TTL 변경 int optval = TTL 값; setsockopt(sock, IPPROTO_IP, IP_TTL, (char *)&optval, sizeof(optval)); #include <ws2tcpip.h> ... // IPv6의 TTL 변경 int optval = TTL 값; setsockopt(sock, IPPROTO_IPV6, IPV6_UNICAST_HOPS, (char *)&optval, sizeof(optval)); TCP/IP 윈도우 소켓 프로그래밍

ICMP.DLL (1) IcmpCreateFile() 함수 HANDLE IcmpCreateFile(void) ; 성공: 핸들, 실패: INVALID_HANDLE_VALUE TCP/IP 윈도우 소켓 프로그래밍

ICMP.DLL (2) IcmpSendEcho() 함수 DWORD IcmpSendEcho ( HANDLE IcmpHandle, ULONG DestinationAddress, LPVOID RequestData, WORD RequestSize, PIP_OPTION_INFORMATION RequestOptions, LPVOID ReplyBuffer, DWORD ReplySize, DWORD Timeout ) ; 성공: ReplyBuffer에 저장된 ICMP_ECHO_REPLY 구조체 개수 실패: 0 TCP/IP 윈도우 소켓 프로그래밍

ICMP.DLL (3) 관련 구조체 typedef struct { unsigned char Ttl; // Time To Live unsigned char Tos; // Type Of Service unsigned char Flags; // IP header flags unsigned char OptionsSize; // Size in bytes of options data unsigned char *OptionsData; // Pointer to options data } IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION; typedef struct { DWORD Address; // Replying address unsigned long Status; // Reply status unsigned long RoundTripTime; // RTT in milliseconds unsigned short DataSize; // Echo data size unsigned short Reserved; // Reserved for system use void *Data; // Pointer to the echo data IP_OPTION_INFORMATION Options; // Reply options } IP_ECHO_REPLY, *PIP_ECHO_REPLY; TCP/IP 윈도우 소켓 프로그래밍

ICMP.DLL (4) IcmpCloseHandle() 함수 BOOL IcmpCloseHandle ( HANDLE IcmpHandle ) ; 성공: TRUE, 실패: FALSE TCP/IP 윈도우 소켓 프로그래밍

ICMP.DLL (5) DLL 조작 함수 HMODULE LoadLibrary ( LPCTSTR lpFileName // DLL 파일 이름 ) ; 성공: 핸들, 실패: NULL FARPROC GetProcAddress ( HMODULE hModule, LPCSTR lpProcName ) ; 성공: 함수 주소, 실패: NULL BOOL WINAPI FreeLibrary( HMODULE hModule ); 성공: 0이 아닌 값, 실패: 0 TCP/IP 윈도우 소켓 프로그래밍

Thank you www.hanb.co.kr TCP/IP 윈도우 소켓 프로그래밍