HTTP (Hypertext Transfer Protocol)

Slides:



Advertisements
Similar presentations
HTTPS Packet Capture Tutorial
Advertisements

박승제 웹 애플리케이션 기술 박승제
Chapter 02. 웹에 대한 이해. Chapter 02. 웹에 대한 이해 웹의 역사 HTTP 웹 애플리케이션 기술.
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
Oozie Web API 기능 테스트 이승엽.
제 22 장 HTTP 22.1 HTTP 트랜잭션 22.2 요청 메시지 22.3 응답 메시지 22.4 헤더 22.5 예제
Chapter 4: 이더넷 (Ethernet)
Image & Video processing
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Postfix MTA SPARCS 08 진준호 ( Alex ).
Ch.07-5 xml-rpc 사용하기 김상엽.
Network Lab. Young-Chul Hwang
PHP입문 Izayoi 김조흔.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
1장. JSP 및 Servlet을 활용한 동적 웹 프로그래밍 소개 제1장.
웹 프로토콜과 로그의 이해 ★ 웹 프로토콜 ★ 통신 절차 ★ HTTP Request ★ HTTP Response.
125. WAPPLES Policy Setting Guideline
FTP (File Transfer Protocol)
Chapter 02 웹의 이해.
Chapter 6: 인터넷 제어 메시지 프로토콜(ICMP)
제 14장 Multicast & Broadcast
Traceroute 기능 분석 및 프로그래밍
Chapter 3: AMAN 2002 구성 및 사용법
UDP (User Datagram Protocol)
IP (Internet Protocol)
Chapter 21 Network Layer: ARP, ICMP (IGMP).
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
NJM Messenger 박상원 박연호.
ARP Project 조 충 호 교수님 김 세 진 조교님 조 진 형 변 익 수
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
Socket Address Structure and Byte Ordering Functions
Socket Address Structure and Byte Ordering Functions
HTTP : Hyper Text Transfer Protocol
3강. JSP 맛보기 JSP 문서 작성 하기 JSP 아키텍처 Lecturer Kim Myoung-Ho Nickname 블스
Network Security WireShark를 활용한 프로토콜 분석 II.
WOL(Wake-On Lan) 컴퓨터공학과 4학년 박기웅.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Web Basic 김영성 인천대 OneScore
Trivial File Transfer Protocol (TFTP)
Network Security WireShark를 활용한 프로토콜 분석 I.
Web Vulnerabilities 정보 보호 2008/05/31 Getroot.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
제 15 장 BOOTP와 DHCP BOOTP 15.2 동적 호스트 설정 프로토콜.
Smart Workplace 개발자 가이드
Wi-Fi 취약점 분석 본 프로젝트는 Wi-Fi 환경에서의 취약점 분석을 위한 프로젝트로 다양한 공격방법을 테스트
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Internet 데이터 전송 목표: 인터넷의 개요 및 기본 내용을 살펴보고 VB에서의 데이터 전송 프로그래밍에 대하여 학습한다. 주요내용 인터넷의 개요 인터넷 데이터 전송 인터넷 프로그래밍 Winsock Client Server 프로그래밍.
오라클 넷(Oracle Net)의 개념 및 구성
웹디자인
CGI란 무엇인가? CGI(Common Gateway Interface)의 정의
Network 네트워크 이론 및 실습 TCP / IP 4장.
CHAP 21. 전화, SMS, 주소록.
Session Initiation Protocol
웹(WWW).
Chapter 27 Mobile IP.
연습 문제 풀이 HTTP 메시지의 종류 요청/ 응답 구별  메소드로 시작되므로 요청 메시지임
Introduction to JSP & Servlet
~27 윤형기 Python 프로그래밍 (보충) ~27 윤형기
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
JSP Programming with a Workbook
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
웹 스크래핑.
Network Lab. Young-Chul Hwang
ARP.
20 XMLHttpRequest.
Presentation transcript:

HTTP (Hypertext Transfer Protocol) Chapter 10: HTTP (Hypertext Transfer Protocol) 2003. 6.

HTTP 기능 WWW(World Wide Web) 상의 데이터 접근 시 사용되는 프로토콜 (TCP 80번 포트 사용) 하나의 페이지에서 다른 페이지로 이동하는 하이퍼텍스트 환경에서 효과적으로 이용됨 HTML, audio, video, … 웹 서버 웹 클라이언트 (browser) 하이퍼 텍스트 링크 TCP 포트 80

HTTP 메시지 구조 요청 메시지 : 정보, 자료 요청 응답 메시지 : 요청에 대한 응답 요청 라인, 헤더, 공백 라인, 본문으로 구성 응답 메시지 : 요청에 대한 응답 상태라인, 헤더, 공백라인, 본문으로 구성 요청 라인 헤더 (일반헤더 | 요청헤더 | 엔터티헤더) 공백 라인 엔터티 본문 (요청 메시지) 상태 라인 (일반헤더 | 응답헤더 | 엔터티헤더) (응답 메시지) HTTP 요청 메시지 HTTP 응답 메시지

요청 라인(Request Line) 메소드 : 서비스 수행 기능 명시 URL : 웹페이지 위치 정보 HTTP 버전 : HTTP 프로토콜 버전 정보 (현재 v1.1) <major>.<minor> Protocol ID PW Domain Port Directory File http:// shseo : xxx @ www.yahoo.com 8080 /temp /index.htm ftp:// ftp.yahoo.com 3000 / 메소드 (요청 타입) SP URL HTTP 버전 CR LF 프로토콜 :// 호스트 주소 : 포트 번호 / 경로

상태 라인 (Status Line) HTTP 버전 : 응답 메시지에서 사용하는 HTTP 버전 상태 코드 : 요청 수락 및 수행 시도의 결과를 나타내는 3자리의 십진수 코드 상태 설명 : 사용자를 위한 상태 코드의 설명 HTTP 버전 SP 상태 코드 상태 설명

상태 코드 상태코드의 첫번째 십진수 의미 승인된 상태코드 의미 1XX : 정보 2XX : 성공, 3XX :재전송 요구 200 OK 302 Found 404 Not Found 201 Created 304 Not Modified 500 Internal Server Error 202 Accepted 400 Bad Request 501 Not Implemented 204 No Content 401 Unauthorized 502 Bad GateWay 301 Moved Permanently 403 Forbidden 503 Service Unavailable

헤더 (Header) HTTP 송수신 메시지에서 모두 사용 클라이언트와 서버간의 추가적인 정보 교환 헤더 종류 일반 헤더 (General Header) 요청 헤더 (Request Header) 응답 헤더 (Response Header) 엔터티 헤더(Entity Header) 헤더 명 : SP 헤더 값 CR LF

헤더 (Header) 일반 헤더 요청 헤더 메시지에 대한 일반적인 정보 전달 Cache-Control, Connection, Date, Pragma, Transfer-Encoding, Upgrade, Via 요청 헤더 요청에 대한 추가 정보 및 클라이언트에 대한 정보 전달 요청 메시지에서만 이용 Accept, Accept-Charset, Accept-Encoding, Accept-Language, Authorization, From, Host, If-Modified-Since, If-Match, If-None-Match, If-Unmodified-Since, Max-Forwards, Proxy-Authorization, Range, Referer, Use-Agent

헤더 (Header) 응답 헤더 엔터티 헤더 서버의 구성과 응답에 대한 추가적인 정보 전달 응답 메시지에서만 이용 Age, Location, Proxy-Authenticate, Public, Retry-After, Server, Warning, WWW-Authenticate, Accept-Ranges 엔터티 헤더 문서의 본문에 대한 정보 전달 Allow, Content-Base, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Type, ETag, Expires, Last-Modified

메소드 (Method) GET HEAD POST URL에 지정된 정보 획득 일반적인 웹 서핑 시 주로 이용 본문은 제외하고 헤더만을 전달 받음 기타 사항은 GET 메소드와 같음 POST 클라이언트에서 서버로 정보를 전달 게시판, 카운터, 뉴스그룹, 메일링 리스트 등으로 메시지 전달 (CGI 프로그램에서 주로 사용)

DOS를 이용한 HTTP 동작 실험 아래 명령을 MS-DOS에서 입력 C:\>telnet www.aide.co.kr 80<엔터> GET /<엔터>  HTTP v0.9 C:\>telnet www.aide.co.kr 80<엔터> GET / HTTP/1.0<엔터> <엔터>  HTTP v1.0 C:\>telnet www.aide.co.kr 80<엔터> GET / HTTP/1.1<엔터> Host: www.aide.co.kr<엔터> <엔터>  HTTP v1.1

HTTP 요청 메시지 분석(GET) HTTP 요청 메시지 (www.yahoo.co.kr)

HTTP 요청 메시지 분석(GET) 요청 라인 헤더 라인 Get 메소드 이용 HTTP 버전 1.1 사용 요청 헤더 : Accept, Accept-Language, Accept-Encoding, User-Agent, Host, 일반 헤더 : Connection 메소드 스페이스 URL HTTP 버전 라인의 끝 GET SP / (현재 디렉토리) HTTP/1.1 CR LF 47 45 54 20 2F 48 54 54 50 2F 31 2E 31 0D 0A

HTTP 응답 메시지 분석 HTTP 응답 메시지 (www.yahoo.co.kr)

HTTP 응답 메시지 분석 상태 라인 헤더 라인 HTTP 버전 1.1 이용 302 Found : 요청한 자원이 일시적으로 다른 URL로 옮김 헤더 라인 일반 헤더 : Date, Connection, Transfer-Encoding, Content-Type 응답 헤더 : Location 상태 라인 48 54 54 50 2F 31 2E 31 46 6F 75 6E 64 20 0D 0A 33 30 32 F o u n d H t t p / 1 . 1 SP CR LF 3 0 2

연습 문제 HTTP 메시지의 종류 헤더의 종류 본문 내용 송신/ 수신 구별 GET, HEAD, POST 47 45 54 20 2F 69 6E 64 65 78 2E 68 74 6D 6C 20 48 54 54 50 2F 31 2E 31 OD OA 41 63 63 65 70 74 3A 20 2A 2F 2A OD OA 48 6F 73 74 3A 20 77 77 77 2E 6A 6F 69 6E 73 2E 63 6F 6D OD OA OD OA (요청 라인? 상태 라인?) 헤더 (일반헤더? 요청/응답헤더? 엔터티헤더?) 본문 (유? 무?) 공백 라인? HTTP 메시지의 종류 송신/ 수신 구별 GET, HEAD, POST 헤더의 종류 일반 헤더, 요청 헤더, 응답 헤더, 엔터티 헤더 본문 내용 본문 유무 및 내용

아래 패킷을 분석하시오 08 00 46 18 BD C8 00 08 E2 44 76 3C 08 00 45 00 01 32 81 F8 40 00 31 06 EC A1 D3 20 77 97 D2 62 BD 11 00 50 0B 5E 1A 36 BE 0B 4D EA FF 00 50 18 44 70 31 FE 00 00 48 54 54 50 2F 31 2E 31 20 33 30 32 20 46 6F 75 6E 64 0D 0A 44 61 74 65 3A 20 4D 6F 6E 2C 20 30 39 20 4A 75 6E 20 32 30 30 33 20 30 35 3A 35 32 3A 33 32 20 47 4D 54 0D 0A 4C 6F 63 61 74 69 6F 6E 3A 20 68 74 74 70 3A 2F 2F 6B 72 2E 79 61 68 6F 6F 2E 63 6F 6D 2F 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 63 6C 6F 73 65 0D 0A 54 72 61 6E 73 66 65 72 2D 45 6E 63 6F 64 69 6E 67 3A 20 63 68 75 6E 6B 65 64 0D 0A 43 6F 6E 74 65 6E 74 2D 54 79 70 65 3A 20 74 65 78 74 2F 68 74 6D 6C 3B 20 63 68 61 72 73 65 74 3D 69 73 6F 2D 38 38 35 39 2D 31 0D 0A 0D 0A … 사용된 프로토콜 개수: 근원지 MAC 주소: 근원지 IP 주소: 근원지 Port 번호: 사용된 프로토콜 이름: 목적지 MAC 주소: 목적지 IP 주소: 목적지 Port 번호:

Guru를 이용한 HTTP 패킷 분석

HTTP 패킷 캡처 프로그램 작성

새 프로젝트 생성 및 환경설정 다이얼로그 기반의 프로젝트 생성 Include 경로 및 라이브러리 경로 설정 Include files : C:\AMAN2002\include Library files : C:\AMAN2002\lib Tools->Options 메뉴 이용 Ncap 라이브러리(Ncapd.lib)를 프로젝트에 포함 Project->Settings 메뉴 이용

대화상자 디자인 HttpViewer 메인 대화상자 디자인 List Control Edit Box Edit Box 7 8 1 List Control 2 Edit Box 3 Edit Box 4 5 6 Edit Box Edit Box Button

Control 속성 # 종류 ID 속성 변수 1 List Control IDC_LIST View: Report CListCtrl m_LIST_PacketInfo 2 Edit Box IDC_EDIT_AsciiResult Read-Only CString m_EDIT_strAsciiResult 3 IDC_EDIT_HexaResult CString m_EDIT_strHexaResult 4 EditBox IDC_EDIT_Monitoring int m_EDIT_iCountInput 5 IDC_EDIT_Monitored int m_EDIT_iCountOutput 6 Button IDC_BUTTON_StartCapture 7 IDC_BUTTON_About 8 IDCANCEL Default Button

이벤트 처리 # 종류 ID 메시지 함수명 1 List Control IDC_LIST NM_CLICK OnClickList() 6 Button IDC_BUTTON_StartCapture BN_CLICKED OnBUTTONStartCapture() 7 IDC_BUTTON_About OnBUTTONAbout() 8 IDCANCEL OnCancel()

어댑터 선택 및 어댑터 열기 void CEtherViewerDlg::OnBUTTONSelectAdaptor() { //Ncap lib.(Dialog based class lib.) 객체 생성. CSelectAdaptorDlg *pDlg = new CSelectAdaptorDlg; if(pDlg->DoModal() != IDOK) delete pDlg; return; } //선택된 네트워크 어뎁터를 사용할 수 있도록 초기화. TCP 기반의 패킷만 획득 if(pDlg->OpenAdaptor(2)) …

패킷 캡처 #define MaxBufferLen 2048 // 획득한 패킷을 저장하기 위한 버퍼 #define EtherHeaderLength 14 // 이더넷 헤더 길이를 14로 할당 UpdateData(TRUE); … int i = 0; unsigned char arrTemp[MaxBufferLen]; While(i < m_EDIT_iCountInput) { memset(arrTemp, 0, MaxBufferLen); //패킷을 하나 획득함. 음수가 return되면 에러가 발생한 것. if(pDlg->Ncap(arrTemp, MaxBufferLen) < 0) continue; //패킷 분석 }

패킷 분석 // 시작 지점 주소를 t_EtherHeader 구조체 주소로 대입 t_EtherHeader *tEtherHeader = (t_EtherHeader *)arrTemp; // 이더넷 데이터의 시작 지점을 t_IPHeader 구조체로 전달 t_IPHeader *tIPHeader = (t_IPHeader *) tEtherHeader->eth_data; // IP 헤더 길이 정보 획득 int iIpHeaderLength = tIPHeader->ip_hl << 2; int iIpOptionHeader = (iIpHeaderLength - 20); t_TCPHeader *tTcpHeader = (t_TCPHeader *) tIPHeader->ip_data + iIpOptionHeader; // 근원지 포트 번호 unsigned short iSourcePort = htons(tTcpHeader->tcp_sport); // 목적지 포트 번호 unsigned short iDestinationPort = htons(tTcpHeader->tcp_dport); // HTTP 패킷 구별 (슬라이드 25)

HTTP 패킷 구별 // TCP 헤더의 포트 필드 값이 80인 것만 골라냄. if(iSourcePort == 80 || iDestinationPort == 80) { // 일련번호 CString strNum = _T(""); strNum.Format(_T("%d"), i); m_LIST_PacketInfo.InsertItem(LVIF_TEXT, i, strNum, 0, 0, 0, 0 ); // 근원지 포트 CString strHttpSrcPort = _T(""); strHttpSrcPort.Format("%d", iSourcePort); m_LIST_PacketInfo.SetItem(i, 1, LVIF_TEXT, strHttpSrcPort, 0, 0, 0, 0); // 목적지 포트 CString strHttpDesPort = _T(""); strHttpDesPort.Format("%d", iDestinationPort); m_LIST_PacketInfo.SetItem(i, 2, LVIF_TEXT, strHttpDesPort, 0, 0, 0, 0); // TCP 헤더 길이 정보 획득 int iTcpHeaderLength = (htons(tTcpHeader->tcp_off) & 0xF000) >> 10; // HTTP 메시지 출력 (슬라이드 26번) … }

HTTP 메시지 출력 // TCP 헤더 길이 정보 획득 int iTcpHeaderLength = (htons(tTcpHeader->tcp_off) & 0xF000) >> 10; // 메시지 CString strHttpMessage = _T(""); CString strTemp = _T(""); // HTTP 메시지의 시작 지점 int iHttpDataStart = EtherHeaderLength + iIpHeaderLength + iTcpHeaderLength; // HTTP 메시지를 ASCII와 HEXA 형태로 변환 후 출력. for(int j=iHttpDataStart; j< iLengthOfPacket; j++) { strTemp.Format(_T("%c"), arrTemp[j]); m_strDataBuffer[i] +=strTemp; strTemp.Format(_T("%02X "), arrTemp[j]); strHttpMessage += strTemp; } m_LIST_PacketInfo.SetItem(i, 3, LVIF_TEXT, strHttpMessage, 0, 0, 0, 0);

HTTP 실행 모습

HttpViewer를 이용한 HTTP 패킷 분석

HttpViewer를 이용한 HTTP 패킷 분석 근원지 포트 : 1041 목적지 포트 : 80 메시지 종류 : 요청 메시지 Get 메소드 사용 HTTP 버전 1.1 사용 헤더 : Accept, Accept-Language, Accept-Encoding, User-Agent, Host, Connection, Cookie Accept : */* (모든 종류의 파일 수락) Accept-Language : ko (한국어) Host : www.joins.com 목적지로 접근 각 라인의 끝은 ‘OD OA’ 문자로 종료

참고 문헌 서승호 외, AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍, 정익사, 2002. RFC 1945, T.Berners-Lee(MIT/LSC), R. Fielding(UC Irvine), H. Frystyk(MIT/LCS), Hypertext Transfer Protocol -- HTTP/1.0, May 1996. RFC 2068, R. Fielding(UC Irvine), J. Gettys, J. Mogul(DEC), H. Frystyk, T. Berners-Lee(MIT/LCS), Hypertext Transfer Protocol -- HTTP/1.1, January 1997. RFC 2616, R. Fielding(UC Irvine), J. Gettys, J. Mogul(DEC), H. Frystyk, T. Berners-Lee(W3C/MIT), Hypertext Transfer Protocol -- HTTP/1.1, January 1999. RFC 2660, E. Rescorla(RTFM, Inc.), A. Schiffman(Terisa Systems, Inc.), The Secure HyperText Transfer Protocol, August 1999.