Download presentation
Presentation is loading. Please wait.
1
Traceroute 기능 분석 및 프로그래밍
Chapter 7: Traceroute 기능 분석 및 프로그래밍
2
Traceroute 패킷이 목적지에 도달하는 경로를 추적하는 프로그램
자신의 컴퓨터가 목적지에 도달하기까지 거치게 되는 게이트웨이를 기록 사용 목적 호스트 사이의 라우팅 문제를 파악 인터넷 상의 문제가 되는 네트워크를 파악
3
Traceroute의 동작원리 IP의 TTL(Time-to-live) 필드와 ICMP 패킷 이용 TTL ?
패킷 전송 중에 라우팅 프로토콜의 이상으로 경로상에 무한 루프가 발생하는 현상을 방지하기 위한 필드 IP 패킷 전송 시 64로 설정 패킷이 라우터에 도착하면 1씩 감소시켜 다음 홉(next hop)으로 전송 특정 라우터에 TTL이 0이거나 1인 패킷이 도착하면 이 라우터는 타입이 11이고 코드가 0인 ICMP 시간초과 메시지를 송신한 쪽으로 전달함
4
Traceroute의 동작원리 TTL을 1로 설정한 ICMP echo request 패킷 전송
시간초과 메시지에는 라우터의 이름과 IP 주소를 포함 TTL을 2로 설정한 ICMP echo request 패킷 전송 경로상의 두번째 라우터에서 ICMP 시간초과 메시지 반송 최종 목적지에 도달할 때까지 TTL 필드 값을 1씩 증가시켜가면서 echo request 전송-ICMP 시간초과 메시지 반송
5
Traceroute의 동작 < TTL 값이 1일 때 > < TTL 값이 2일 때 > 목적지 호스트
송신측 호스트 목적지 호스트 ICMP 시간초과 메시지 ICMP 반향 요청 메시지 < TTL 값이 1일 때 > ICMP 시간초과 메시지 ICMP 반향 요청 메시지 송신측 호스트 목적지 호스트 < TTL 값이 2일 때 >
6
Traceroute의 동작 < TTL 값이 3(최종 목적지)일 때 > 목적지 호스트 송신측 호스트
ICMP 반향 응답메시지 ICMP 반향 요청 메시지 송신측 호스트 목적지 호스트 < TTL 값이 3(최종 목적지)일 때 >
7
MS-DOS창에서 Traceroute 실행
사이트로 traceroute 실행 MS-DOS에서 제공하는 Traceroute 프로그램 “ tracert ” 사용방법 교재 495쪽, 부록 1의 6번 참고 홉 수 지연 시간 라우터의 IP 주소
8
AMAN2002 Traceroute 실행 [1] Traceroute를 수행할 대상이 되는 호스트의 IP 주소나 호스트 이름
[4] 체크박스가 설정되어 있으면 게이트웨이의 이름을 얻어옴 [5] Host Name이 표시된 항목을 선택하면 버튼이 활성화되고 버튼을 클릭하면 HostName의 Whois 정보가 나타남 [6] 도움말을 보여줌 [7] Traceroute 윈도우를 닫음 [8] Traceroute를 수행한 결과를 보여줌.
9
AMAN2002 Traceroute 실행 Whois 정보 조회
10
Traceroute에 대한 패킷 캡처 첫번째 라우터에 ICMP Echo Request 요청
TTL: 1 송신지 주소 : 수신지 주소 : ICMP 헤더 : E C 첫번째 라우터에 ICMP Echo Request 요청
11
Traceroute에 대한 패킷 캡처 ICMP 헤더의 타입이 8이므로 ICMP Echo Request 메시지임
TTL이 1이므로 첫번째 라우터의 ICMP 메시지에 대한 응답을 기대함 목적지 주소는 임 필드 16진수 10진수 TTL 01 1 Protocol 송신지 주소 D2 62 BD 17 수신지 주소 D ICMP 헤더 : 타입 08 8 ICMP 헤더 : 코드 00
12
Traceroute에 대한 패킷 캡처 ICMP Echo Request에 대한 첫번째 라우터의 응답
송신지 주소 : 수신지 주소 : ICMP 헤더 : 0B B ICMP Echo Request에 대한 첫번째 라우터의 응답
13
Traceroute에 대한 패킷 캡처 ICMP 헤더의 타입이 0x11이므로 ICMP Time Exceed 메시지임
첫번째 라우터의 IP 주소는 송신지 주소( )임 수신지 주소는 ICMP Echo Request를 호출한 임 필드 16진수 10진수 Protocol 01 1 송신지 주소 D3 AB CB 01 수신지 주소 D2 62 BD 17 ICMP 헤더 : 타입 11 17 ICMP 헤더 : 코드 00
14
연습 문제 WinTraceroute를 실행하여 목적지 호스트에 도달하기까지의 네트워크 경로를 그림으로 나타내어 보라.
전송하는 패킷의 TTL 값, ICMP 메시지와 관련시킬 것
15
ping 프로그램 작성 《WinPing》 ※ 프로젝트 생성 및 라이브러리 경로 설정은
『ch04. 이더넷(Ethernet)』의 “이더넷 캡처 프로그램 작성”과 동일
16
프로젝트 설정 Microsoft Visual C++ 6.0의 메뉴에서 Project Settings Link 탭 Object/library modules: nmicmpd.lib 추가
17
대화상자 디자인 1 3 4 Edit Box 2 5 6 7 Button
18
대화상자 디자인 8 9 10 11 12
19
Control 속성 # 종류 ID 속성 변수이름 1 Edit Box IDC_EDIT_IPAddr m_EDIT_ADDR 2
IDC_EDIT_Message Read-only m_EDIT_Message 3 Button IDC_BUTTON_Ping 4 IDC_BUTTON_Option 5 IDC_BUTTON_Info 6 IDC_BUTTON_Help 7 IDOK Default Button 8 IDC_BufferSize m_Buffersize 9 IDC_Timeout m_MaxHops 10 IDC_MaxHops m_pingTimeout 11 12 IDCANCEL
20
이벤트 처리 OnBUTTONPing() # 종류 ID 메시지 함수 명 3 Button IDC_BUTTON_Ping
BN_CLICKED OnBUTTONPing() 4 IDC_BUTTON_Option OnBUTTONOption() 5 IDC_BUTTON_Info OnBUTTONInfo() 6 IDC_BUTTON_Help OnBUTTONHelp()
21
Winping 프로그램 코드 작성 ///////////////////////////////////////////////////////////////////////////////////////////// // Nmicmpd 라이브러리를 이용하여 ping을 수행하는 함수 void CWinpingDlg::OnBUTTONPing() { // 사용자 화면에 있는 값을 변수에 저장 UpdateData(TRUE); // 결과값을 담을 구조체 정의 t_PingResult *pPingResult = new t_PingResult(); // ping 실행 long lResult = m_CIcmpEcho.pingRequest(m_EDIT_ADDR, pPingResult); // 변수에 결과값을 저장 CString strTemp;
22
Winping 프로그램 코드 작성 strTemp.Format("%ld msec. %d%%(Loss). %s",
pPingResult->lRoundTripTime, pPingResult->iLossRate, pPingResult->strError ); // 결과값을 Edit box에 표시 m_EDIT_Message = strTemp + "\r\n" + m_EDIT_Message ; UpdateData(FALSE); // 자원해제 delete pPingResult; }
23
Winping 프로그램 코드 작성 ///////////////////////////////////////////////////////////////////////////// // Ping에 대한 옵션을 설정하는 함수 void CWinpingDlg::OnBUTTONOption() { // 옵션 설정창을 띄움 int iResult = m_COptionsDlg.DoModal(); if (iResult != IDOK) return; // 옵션 설정창으로부터 전달받은 값을 CIcmpEcho 클래스로 전달함 UpdateData(TRUE); m_CIcmpEcho.setPingDataLength(m_COptionsDlg.m_BufferSize); m_CIcmpEcho.setPingTimeOut(m_COptionsDlg.m_PingTimeout); m_CIcmpEcho.setPingMaxHops(m_COptionsDlg.m_MaxHops); }
24
Winping 프로그램 코드 작성 ///////////////////////////////////////////////////////////////////////////// // WinPing 정보 대화상자 void CWinpingDlg::OnBUTTONInfo() { CAboutDlg CMyAboutDlg; CMyAboutDlg.DoModal(); } // AMAN 2002 도움말 호출 void CWinpingDlg::OnBUTTONHelp() ::ShellExecute(NULL, "open", (LPSTR)(LPCTSTR)"AMAN2002.chm", NULL, "C:\\AMAN2002\\", SW_SHOWNORMAL);
25
Winping 실행화면 WinPing 예제 프로그램 실행 화면 속성 설정 대화상자
26
Traceroute 프로그램 작성 《WinTraceroute》
※ 프로젝트 생성 및 라이브러리 경로 설정은 『ch04. 이더넷(Ethernet)』의 “이더넷 캡처 프로그램 작성”과 동일
27
프로젝트 설정 Microsoft Visual C++ 6.0의 메뉴에서 Project Settings Link 탭 Object/library modules: nmtrtd.lib 추가
28
대화상자 디자인 1 3 4 Edit Box 2 5 6 Button
29
Control 속성 이벤트 처리 # 종류 ID 속성 변수이름 1 Edit Box IDC_EDIT_IPAddr
m_EDIT_IPAddr 2 IDC_EDIT_Message Read-only m_EDIT_Message 3 Button IDC_BUTTON_Traceroute 4 IDC_BUTTON_INFO 5 IDC_BUTTON_HELP 6 IDOK Default Button 이벤트 처리 # 종류 ID 메시지 함수 명 3 Button IDC_BUTTON_Traceroute BN_CLICKED OnBUTTONTraceroute() 4 IDC_BUTTON_INFO OnButtonInfo() 5 IDC_BUTTON_HELP OnButtonHelp()
30
WinTraceroute 프로그램 코드 작성
/////////////////////////////////////////////////////////////////////////////////////// // Nmtrtd 라이브러리를 이용하여 ping을 수행하는 함수 void CWintrtDlg::OnBUTTONTraceroute() { // 사용자 화면에 있는 값을 변수에 저장 UpdateData(TRUE); // 결과값을 담을 구조체 정의 t_TracerouteInfo *pTrtInfo = new t_TracerouteInfo[MAX_HOPS]; int iResult = m_CTraceroute.tracerouteRequest(m_EDIT_IPAddr, pTrtInfo); if (iResult>MAX_HOPS) // nResult는 MAX_HOPS 넘지 않는다. iResult = 0; // 변수에 결과값을 저장 m_EDIT_Message = "Seq\tDelay\tIP Address \r\n";
31
WinTraceroute 프로그램 코드 작성
CString strSeq; CString strDelay; CString strIpAddr; // 결과값을 Edit box에 표시 for (int i=0; i<iResult; i++) { strSeq.Format("%d", (pTrtInfo+i)->iSeq ); strDelay.Format("%d", (pTrtInfo+i)->iDelay ); strIpAddr = (pTrtInfo+i)->strIpAddr; m_EDIT_Message = m_EDIT_Message + strSeq + "\t" + strDelay + "\t" + strIpAddr + "\r\n"; UpdateData(FALSE); } // 자원해제 delete [] pTrtInfo;
32
WinTraceroute 프로그램 코드 작성
///////////////////////////////////////////////////////////////////////////// // WinTraceroute 정보 대화상자 void CWintrtDlg::OnButtonInfo() { CAboutDlg CMyAboutDlg; CMyAboutDlg.DoModal(); } // AMAN 2002 도움말 호출 void CWintrtDlg::OnButtonHelp() ::ShellExecute(NULL, "open", (LPSTR)(LPCTSTR)"AMAN2002.chm", NULL, "C:\\AMAN2002\\", SW_SHOWNORMAL);
33
WinTraceroute 실행화면 WinTraceroute 실행화면
34
참고 문헌 서승호 외, AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍, 정익사, 2002.
IETF, RFC 792, “Internet Control Message Protocol”, 1981. James F. Kurose, Keith W. Ross, “Computer Networking: A top-down approach featuring the Internet”, Addison Wesley, 2001. Douglas E. comer, David L. Stevens, “Internetworking with TCP/IP”, Prentice Hall, 1995. W.Richard Stevens, “TCP/IP Illustrated Vol. 1:The Protocols”, Addison Wesley, 1994.
Similar presentations