Download presentation
Presentation is loading. Please wait.
1
FTP (File Transfer Protocol)
Chapter 11: FTP (File Transfer Protocol)
2
FTP 기능 네트워크 상에서 파일을 다른 시스템으로 전달하는 프로토콜
제어 연결(포트 21번)과 데이터 연결(포트 20번)로 구성 파일 이름의 구조, 텍스트 표현 방식, 디렉토리 구조 고려 사용자 인터페이스 사용자 프로토콜 인터프리터 사용자 데이터 전송 기능 클라이언트 서버 프로토콜 서버 데이터 서버 파일 시스템 제어 연결 데이터 연결 (FTP 명령/응답)
3
제어 연결과 데이터 연결 제어 연결 데이터 연결 전송시의 제어 명령을 전달 포트 21번 이용
데이터 연결관련 제어 정보 : 데이터 전송 포트, 전송 모드, 데이터 표현 타입 등 파일 관련 명령 : 파일 저장, 첨부, 삭제 등 데이터 연결 포트 20번 이용 데이터(파일) 전송을 위한 연결
4
제어 연결 설정 제어 프로세스 데이터 전송 21 6000 a. 서버의 수동 오픈 b. 클라이언트의 능동 오픈 자식 제어 생성
7000 c. 서버의 원 제어 프로세스와 자식 제어 프로세스 상태 클라이언트 서버
5
데이터 연결 설정 제어 프로세스 데이터 전송 21 6000 수동 오픈 a. 클라이언트의 수동 오픈 6100
c. 서버의 데이터 전송 프로세스가 자식 데이터 전송 프로세스 생성 20 b. 클라이언트의 수동 오픈 포트 번호를 서버로 전달 PORT 6100 자식 데이터 전송 프로세스 7100 d. 자식 데이터 전송 프로세스와의 통신 클라이언트 서버
6
데이터 연결 설정을 통한 통신 데이터 타입 데이터 구조 전송 모드 다양한 데이터 타입 설정
ASCII, EBCDIC, IMAGE, LOCAL 타입 TYPE 명령을 통해 변경 데이터 구조 파일 구조, 레코드 구조, 페이지 구조 STRU 명령을 통해 변경 전송 모드 전송 방식, MODE 명령을 통해 변경 스트림 모드, 블록 모드, 압축 모드
7
FTP 명령 접근 제어 명령 전송 변수 명령 서비스 명령 접근 권한 및 인증 절차를 위해 사용되는 명령
USER, PASS, ACCT, CWD, CDUP, SMNT, REIN, QUIT 전송 변수 명령 기본적으로 할당된 변수의 값을 변경할 때 PORT, PASV, TYPE, STRU, MODE 서비스 명령 파일 전송 관련 제어 정보를 전달 RETR, STOR, STOU, APPE, ALLO, REST, RNFR, RNTO, ABOR, DELE, RMD, MKD, PWD, LIST, NLIST, SITE, SYST, STAT, HELP
8
FTP 응답 코드 FTP 응답 메시지의 첫번째 십진수 의미 FTP 응답 메시지의 두번째 십진수 의미 십진수 의미 1yz
요청한 명령이 초기화 됨 (긍정의 준비 응답) 2yz 요청한 명령이 성공적으로 완료됨 (긍정의 완성 응답) 3yz 명령은 수락되었지만 정보가 더 필요함 (긍정의 진행 중 응답) 4yz 명령이 수락되지 않음 (일시적인 부정의 완료 응답) 5yz 명령이 수락되지 않음 (영구적인 부정의 완료 응답) 십진수 의미 x0z 문법 에러 x1z 정보 – 상태나 도움말 등 정보 요청에 대한 응답 x2z 연결 – 제어 연결과 데이터 연결 참조에 대한 응답 x3z 인증과 계정 – 로그인과 계정 확인 절차에 대한 응답 x4z 지정되지 않음 x5z 파일 시스템 – 파일 시스템 서버의 상태
9
FTP 패킷 분석 FTP 제어 연결을 통한 전송
10
FTP 패킷 분석 44 45 4C 45 20 74 65 73 74 2E 74 78 74 0D 0A Test.txt 파일 제거
DELE 명령 서비스 명령 디렉토리 명이나 파일명을 매개변수로 전달 명령 매개변수 DELE 공백 Test.txt 라인의 끝 C 45 20 E 0D 0A
11
FTP 패킷 분석 FTP 데이터 연결을 통한 전송 데이터 연결을 통한 파일 확인 (test.txt)
12
FTP 패킷 분석 FTP 포트 20번을 이용한 데이터 전송 전달된 파일 크기 : 44 바이트 파일 내용 파일 데이터
(test.txt) F T h i s i s t e s t f o r F T P C E F 74 6F 63 6F 6C 29 ( F i l e T r a n s f e r P r o t o c o l )
13
연습 문제 헥사 값의 의미 FTP 응답 코드의 의미 분석 54 59 50 45 20 41 0D 0A
F E 0D 0A (a) (b)
14
Guru를 이용한 FTP 패킷 분석
15
FTP 패킷 캡처 프로그램 작성 (FtpViewer)
16
프로젝트 생성 및 환경 설정 다이얼로그 기반의 프로젝트 생성 Include 경로 및 라이브러리 경로 설정
Include files : C:\AMAN2002\include Library files : C:\AMAN2002\lib Tools->Options 메뉴 이용 Ncap 라이브러리(Ncapd.lib)를 프로젝트에 포함 Project->Settings 메뉴 이용
17
대화상자 디자인 FtpViewer 메인 대화상자 디자인 List Control Edit Box Button 1 2 3 4 5
6 7 8 Button
18
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_Info 8 IDCANCEL Default Button
19
이벤트 처리 # 종류 ID 메시지 함수명 1 List Control IDC_LIST NM_CLICK OnClickList()
6 Button IDC_BUTTON_StartCapture BN_CLICKED OnBUTTONStartCapture() 7 IDC_BUTTON_Info OnBUTTONInfo() 8 IDCANCEL OnCancel()
20
어댑터 열기 // 선택된 네트워크 어뎁터를 사용할 수 있도록 초기화.
// FTP는 TCP를 기반으로 데이터를 획득하므로 TCP 필터 설정 if(pDlg->OpenAdaptor(2)) { ::AfxMessageBox("Adaptor open 실패"); pDlg->CloseAdaptor(); delete pDlg; return; }
21
패킷 캡처 //패킷을 획득하여 List Control에 표시. #define MaxBufferLen 2048
#define EtherHeaderLength 14 … int i = 0; unsigned char arrTemp[MaxBufferLen]; while(i < m_EDIT_iCountInput) { memset(arrTemp, 0, MaxBufferLen); //패킷을 하나 획득함. 음수가 return되면 에러가 발생한 것. int iLengthOfPacket = pDlg->Ncap(arrTemp, MaxBufferLen); if(iLengthOfPacket <0 ) continue; // 패킷 분석 (슬라이드 22) }
22
패킷 분석 //MASK unsigned char MASK1 = 0x0F; //IP 헤더의 헤더길이 정보를 얻기 위해 사용
unsigned char MASK2 = 0xF0; //TCP 헤더의 헤더길이 정보를 얻기 위해 사용 // IP 헤더 길이 정보 획득 arrTemp[EtherHeaderLength] = arrTemp[EtherHeaderLength] & MASK1; int iIpHeaderLength = arrTemp[EtherHeaderLength]<<2; // TCP 헤더의 근원지 포트 번호 unsigned int iSourcePort = pDlg->Twobytes_to_number( arrTemp[EtherHeaderLength + iIpHeaderLength], arrTemp[EtherHeaderLength + iIpHeaderLength+1]); // TCP 헤더의 목적지 포트 정보 획득 unsigned int iDestinationPort = pDlg-> Twobytes_to_number( arrTemp[EtherHeaderLength + iIpHeaderLength +2], arrTemp[EtherHeaderLength + iIpHeaderLength+1+2]); // FTP 패킷 구별 (슬라이드 23) …
23
FTP 패킷 구별 if(iSourcePort == 20 || iDestinationPort == 20 || iSourcePort == 21 || iDestinationPort == 21) { … // 근원지 포트 및 목적지 포트를 리스트에 출력 // TCP 헤더 길이 정보 획득 arrTemp[EtherHeaderLength + iIpHeaderLength + 12] = arrTemp[EtherHeaderLength + iIpHeaderLength + 12] & MASK2; arrTemp[EtherHeaderLength + iIpHeaderLength + 12]>>4; int iTcpHeaderLength = arrTemp[EtherHeaderLength + iIpHeaderLength + 12] << 2; // FTP 메시지 전체 출력 (슬라이드 24) }
24
FTP 메시지 전체 출력 // 메시지 CString strFtpMessage = _T("");
CString strTemp = _T(""); // FTP 데이터의 시작 지점 int iFtpDataStart = EtherHeaderLength + iIpHeaderLength + iTcpHeaderLength; for(int j=iFtpDataStart; j< iLengthOfPacket; j++) { strTemp.Format(_T("%c"), arrTemp[j]); // 아스키 형태로 출력 m_strDataBuffer[i] += strTemp; strTemp.Format(_T("%02X "), arrTemp[j]); // 헥사 형태로 출력 strFtpMessage += strTemp; } m_LIST_PacketInfo.SetItem(i, 3, LVIF_TEXT, strFtpMessage, 0, 0, 0, 0);
25
FtpViewer 실행 모습
26
FtpViewer를 이용한 FTP 패킷 분석
포트 21번 제어 연결을 통해 제어 명령 전달 (요청) TYPE I 명령 : 데이터 타입을 Image 형으로 변경 명령 매개변수 TYPE 공백 I 라인의 끝 20 49 0D 0A
27
FtpViewer를 이용한 FTP 패킷 분석
응답 코드 200번 : 명령을 완료함 응답 코드 응답코드 설명 200 공백 Type set to I 라인의 끝 20 F E 0D 0A
28
참고 문헌 서승호 외, AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍, 정익사, 2002.
RFC 959, J. Postel, J.K. Reynolds. File Transfer Protocol, Oct 1985. RFC 854, J. Postel, J. Reynolds, Telnet Protocol Specification, May 1983. RFC 1635, P. Deutsch, A. Emtage(Bunyip), A. Marine(NASA NAIC), How to Use Anonymous FTP, May 1994. RFC 697, Jim Lieb, SUMEX-AIM, CWD Command of FTP, July 1975. RFC 412, G. Hicks, User FTP Documentation, Nov 1972. RFC 463, A.K. Bhushan. FTP commants and response, Feb 1973. 11.7 W. Richard Stevens, “TCP/IP Illustrated, Volume I”, Addison wesley, 1996. Behrouz A. Forouzan, “TCP/IP Protocol Suite”, McGraw-Hill, 2000. 김영탁, 김종근, 조유제, 한기준 공저, “데이타 통신 및 컴퓨터망”, 정익사, 1999.
Similar presentations