OSI 참조 모델과 TCP/IP

Download Report

Transcript OSI 참조 모델과 TCP/IP

www.nms4you.com
AMAN2002를 이용한
TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
Chapter 10:
HTTP
(Hypertext Transfer Protocol)
2003. 6.
1
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
HTTP

기능


WWW(World Wide Web) 상의 데이터 접근 시 사용되
는 프로토콜 (TCP 80번 포트 사용)
하나의 페이지에서 다른 페이지로 이동하는 하이퍼텍
스트 환경에서 효과적으로 이용됨
HTML, audio,
video, …
웹 서버
TCP 포트 80
하이퍼
텍스트 링크
하이퍼
웹 서버
텍스트 링크
하이퍼
HTML, audio,
video, …
웹 서버
HTML, audio,
video, …
TCP 포트 80
텍스트 링크
TCP 포트 80
웹 클라이언트
(browser)
제10장 HTTP(Hypertext Transfer Protocol)
2
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
HTTP 메시지 구조

요청 메시지 : 정보, 자료 요청


요청 라인, 헤더, 공백 라인, 본문으로 구성
응답 메시지 : 요청에 대한 응답

상태라인, 헤더, 공백라인, 본문으로 구성
요청 라인
상태 라인
헤더
(일반헤더 | 요청헤더 | 엔터티헤더)
헤더
(일반헤더 | 응답헤더 | 엔터티헤더)
공백 라인
공백 라인
엔터티 본문
(요청 메시지)
엔터티 본문
(응답 메시지)
 HTTP 요청 메시지
 HTTP 응답 메시지
제10장 HTTP(Hypertext Transfer Protocol)
3
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
요청 라인(Request Line)


메소드 : 서비스 수행 기능 명시
URL : 웹페이지 위치 정보
Protocol
ID
PW
Domain
Port
Directory
http://
shseo
:
xxx
@
www.yahoo.com
:
8080
/temp
ftp://
shseo
:
xxx
@
ftp.yahoo.com
:
3000
/

File
/index.htm
HTTP 버전 : HTTP 프로토콜 버전 정보 (현재 v1.1)

<major>.<minor>
메소드 (요청 타입) SP
프로토콜
://
URL
호스트 주소
SP
:
포트 번호
HTTP 버전
/
CR LF
경로
제10장 HTTP(Hypertext Transfer Protocol)
4
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
상태 라인 (Status Line)



HTTP 버전 : 응답 메시지에서 사용하는 HTTP 버전
상태 코드 : 요청 수락 및 수행 시도의 결과를 나타내
는 3자리의 십진수 코드
상태 설명 : 사용자를 위한 상태 코드의 설명
HTTP 버전
SP
상태 코드
SP
상태 설명
SP SP
제10장 HTTP(Hypertext Transfer Protocol)
5
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
상태 코드

상태코드의 첫번째 십진수 의미




1XX : 정보
2XX : 성공,
3XX :재전송 요구
4XX : 클라이언트 에러, 5XX : 서버 에러
승인된 상태코드 의미
코드
의미
코드
의미
코드
의미
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
제10장 HTTP(Hypertext Transfer Protocol)
6
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
헤더 (Header)



HTTP 송수신 메시지에서 모두 사용
클라이언트와 서버간의 추가적인 정보 교환
헤더 종류




일반 헤더 (General Header)
요청 헤더 (Request Header)
응답 헤더 (Response Header)
엔터티 헤더(Entity Header)
헤더 명
:
SP
헤더 값
CR LF
제10장 HTTP(Hypertext Transfer Protocol)
7
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
헤더 (Header)

일반 헤더



메시지에 대한 일반적인 정보 전달
Cache-Control, Connection, Date, Pragma, TransferEncoding, Upgrade, Via
요청 헤더



요청에 대한 추가 정보 및 클라이언트에 대한 정보 전달
요청 메시지에서만 이용
Accept, Accept-Charset, Accept-Encoding, AcceptLanguage, Authorization, From, Host, If-Modified-Since,
If-Match, If-None-Match, If-Unmodified-Since, MaxForwards, Proxy-Authorization, Range, Referer, UseAgent
제10장 HTTP(Hypertext Transfer Protocol)
8
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
헤더 (Header)

응답 헤더




서버의 구성과 응답에 대한 추가적인 정보 전달
응답 메시지에서만 이용
Age, Location, Proxy-Authenticate, Public, Retry-After,
Server, Warning, WWW-Authenticate, Accept-Ranges
엔터티 헤더


문서의 본문에 대한 정보 전달
Allow, Content-Base, Content-Encoding, ContentLanguage, Content-Length, Content-Location, ContentMD5, Content-Range, Content-Type, ETag, Expires,
Last-Modified
제10장 HTTP(Hypertext Transfer Protocol)
9
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
메소드 (Method)

GET



HEAD



URL에 지정된 정보 획득
일반적인 웹 서핑 시 주로 이용
본문은 제외하고 헤더만을 전달 받음
기타 사항은 GET 메소드와 같음
POST


클라이언트에서 서버로 정보를 전달
게시판, 카운터, 뉴스그룹, 메일링 리스트 등으로 메시
지 전달 (CGI 프로그램에서 주로 사용)
제10장 HTTP(Hypertext Transfer Protocol)
10
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
DOS를 이용한 HTTP 동작 실험

아래 명령을 MS-DOS에서 입력
 HTTP v0.9
 HTTP v1.0
 HTTP v1.1
C:\>telnet www.aide.co.kr 80<엔터>
GET /<엔터>
C:\>telnet www.aide.co.kr 80<엔터>
GET / HTTP/1.0<엔터>
<엔터>
C:\>telnet www.aide.co.kr 80<엔터>
GET / HTTP/1.1<엔터>
Host: www.aide.co.kr<엔터>
<엔터>
제10장 HTTP(Hypertext Transfer Protocol)
11
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
HTTP 요청 메시지 분석(GET)
HTTP 요청 메시지
(www.yahoo.co.kr)
제10장 HTTP(Hypertext Transfer Protocol)
12
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
HTTP 요청 메시지 분석(GET)

요청 라인



Get 메소드 이용
HTTP 버전 1.1 사용
메소드
스페이스
URL
스페이스
HTTP 버전
라인의 끝
GET
SP
/ (현재 디렉토리)
SP
HTTP/1.1
CR LF
47 45 54
20
2F
20
48 54 54 50
2F 31 2E 31
0D 0A
헤더 라인


요청 헤더 : Accept, Accept-Language, AcceptEncoding, User-Agent, Host,
일반 헤더 : Connection
제10장 HTTP(Hypertext Transfer Protocol)
13
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
HTTP 응답 메시지 분석
HTTP 응답 메시지
(www.yahoo.co.kr)
제10장 HTTP(Hypertext Transfer Protocol)
14
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
HTTP 응답 메시지 분석

상태 라인


HTTP 버전 1.1 이용
302 Found : 요청한 자원이 일시적으로 다른 URL로
옮김
상태 라인 48 54 54 50 2F 31 2E 31 20 33 30 32 20 46 6F 75 6E 64 0D 0A
H t

t
p
/
1
.
1
SP
3
0 2
SP
F o
u
n d
CR LF
헤더 라인


일반 헤더 : Date, Connection, Transfer-Encoding,
Content-Type
응답 헤더 : Location
제10장 HTTP(Hypertext Transfer Protocol)
15
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
연습 문제
(요청 라인? 상태 라인?)
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


본문 (유? 무?)
송신/ 수신 구별
GET, HEAD, POST
헤더의 종류


공백 라인?
HTTP 메시지의 종류


헤더
(일반헤더? 요청/응답헤더? 엔터티헤더?)
일반 헤더, 요청 헤더, 응답 헤더, 엔터티 헤더
본문 내용

본문 유무 및 내용
제10장 HTTP(Hypertext Transfer Protocol)
16
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
아래 패킷을 분석하시오
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 번호:
제10장 HTTP(Hypertext Transfer Protocol)
17
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
Guru를 이용한 HTTP 패킷 분석
제10장 HTTP(Hypertext Transfer Protocol)
18
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
HTTP 패킷 캡처 프로그램 작성
제10장 HTTP(Hypertext Transfer Protocol)
19
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
새 프로젝트 생성 및 환경설정


다이얼로그 기반의 프로젝트 생성
Include 경로 및 라이브러리 경로 설정




Include files : C:\AMAN2002\include
Library files : C:\AMAN2002\lib
Tools->Options 메뉴 이용
Ncap 라이브러리(Ncapd.lib)를 프로젝트에 포함

Project->Settings 메뉴 이용
제10장 HTTP(Hypertext Transfer Protocol)
20
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
대화상자 디자인

HttpViewer 메인 대화상자 디자인
7
1
2
8
List Control
Edit Box
4
Edit Box
3
Edit Box
5
6
Edit Box
Button
제10장 HTTP(Hypertext Transfer Protocol)
21
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
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
Edit Box
IDC_EDIT_HexaResult
Read-Only
CString m_EDIT_strHexaResult
4
EditBox
IDC_EDIT_Monitoring
5
EditBox
IDC_EDIT_Monitored
6
Button
IDC_BUTTON_StartCapture
7
Button
IDC_BUTTON_About
8
Button
IDCANCEL
int m_EDIT_iCountInput
Read-Only
int m_EDIT_iCountOutput
Default Button
제10장 HTTP(Hypertext Transfer Protocol)
22
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
이벤트 처리
#
종류
ID
메시지
함수명
1
List Control
IDC_LIST
NM_CLICK
OnClickList()
6
Button
IDC_BUTTON_StartCapture
BN_CLICKED
OnBUTTONStartCapture()
7
Button
IDC_BUTTON_About
BN_CLICKED
OnBUTTONAbout()
8
Button
IDCANCEL
BN_CLICKED
OnCancel()
제10장 HTTP(Hypertext Transfer Protocol)
23
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
어댑터 선택 및 어댑터 열기
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))
{
…
}
…
}
제10장 HTTP(Hypertext Transfer Protocol)
24
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
패킷 캡처
#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;
//패킷 분석
…
}
제10장 HTTP(Hypertext Transfer Protocol)
25
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
패킷 분석
// 시작 지점 주소를 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)
제10장 HTTP(Hypertext Transfer Protocol)
26
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
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번)
…
}
제10장 HTTP(Hypertext Transfer Protocol)
27
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
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);
제10장 HTTP(Hypertext Transfer Protocol)
28
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
HTTP 실행 모습
제10장 HTTP(Hypertext Transfer Protocol)
29
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
HttpViewer를 이용한 HTTP 패킷 분석
제10장 HTTP(Hypertext Transfer Protocol)
30
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
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’ 문자로 종료
제10장 HTTP(Hypertext Transfer Protocol)
31
AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍
www.nms4you.com
참고 문헌





서승호 외, 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.
제10장 HTTP(Hypertext Transfer Protocol)
32