Chapter 4: 이더넷 (Ethernet) 2003. 3.
이더넷v2 프레임 기능 한 스테이션에서 다른 스테이션으로 안전하고 효과적으로 패킷을 전송하는 컨테이너(container). 이더넷 프레임의 구조 7byte 1byte 6byte 2byte 46-1500byte 4byte Preamble S F D Destination Address Source Type DATA FCS Ethernet Header SFD: Start-of-frame delimiter, FCS: Frame Check Sequence. Type은 AMAN2002 온라인 도움말의 EtherType을 참고.
이더넷v2 프레임의 구조 Preamble SFD(Start of frame delimiter) 근원지 MAC 주소 동기화 기능 SFD(Start of frame delimiter) 프레임의 시작을 표시 근원지 MAC 주소 데이터를 내보내는 기계의 MAC 주소 목적지 MAC 주소 데이터를 수신할 기계의 MAC 주소 Type 상위 계층 프로토콜 종류를 표시 데이터 필드 상위 프로토콜 데이터 패킷 FCS (Frame Check Sequence) 프레임에 문제가 있는지 판별에 사용 L3 데이터 네트워크 계층 Type 네트워크 인터페이스 계층 (데이터링크 계층) H2 L3 데이터 T2 1 0 1 0 1 0 0 0 1 1 0 물리 계층
(Network Card Interface ID) MAC 주소의 구조 제조 회사 ID IEEE에서 관리하는 NIC 제조회사의 고유번호. AMAN2002 도움말의 OUI Code 참조. NIC(Network Interface Card) ID 3bytes의 고유한 카드 번호. Sony Corporation NIC의 MAC주소 예 제조회사 ID (3 byte) NIC ID (Network Card Interface ID) (3 byte) 08-00-46 - 18-BD-C8 <참고> PC의 MAC 주소를 확인하는 방법 Windows98: DOS창에서 winipcfg /all 명령, NT계열: DOS창에서 ipconfig /all 명령.
IEEE 802.3 프레임 구조 Type 필드를 Length로 대체 데이터 필드에 LLC(Logical Link Control) 추가 Preamble S F D Destination Address Source Length Data FCS 7byte 1byte 6byte 2byte 43-1497byte 4byte DSAP 802.2 LLC header SSAP Ctrl 1 1 1 Ethernet Header Data Field DSAP: Destination Service Access Point, SSAP: Source Service Access Point.
IEEE 802.3 with SNAP 프레임 구조 SNAP(Sub-Network Access Protocol)을 추가하여 지원 가능 프로토콜 수를 확장 Preamble S F D Destination Address Source Length Data FCS 7byte 1byte 6byte 2byte 38-1492byte 4byte DSAP 802.2 LLC header SSAP Ctrl 1 1 1 3 2 Ethernet Header Data Field Code SNAP packet Type
Novell 802.3 Novell 네트워크에서 사용 Novell IPX 데이터만을 지원 함 Ethernet Header Data Field Preamble S F D Destination Address Source Address Length Only IPX Data FCS 7byte 1byte 6byte 6byte 2byte 46-1500byte 4byte
이더넷 프레임 분석 Packet Observer를 이용한 이더넷 분석
이더넷 프레임 분석 송신측 MAC 주소 수신측 MAC 주소 상위 계층 프로토콜 종류 00 00 0C 07 AC 00 00 E0 18 1B 52 BE 08 00 송신측 MAC 주소 NIC 제조회사: 00E018 ASUSTEK COMPUTER INC. Card ID: 1B52BE 수신측 MAC 주소 NIC 제조회사: 00000C CISCO SYSTEMS, INC. Card ID: 07AC00 상위 계층 프로토콜 종류 0x0800 Internet IP (IPv4) 목적지 주소 근원지 주소 Type 회사 ID Card ID 00 00 0C 07 AC 00 00 E0 18 1B 52 BE 08 00
NIC 제조회사 코드표 AMAN2002 Online Help의 “OUI 코드” 참조
상위 계층 프로토콜 번호 AMAN2002 Online Help의 “EtherType” 참조
연습 문제 1 송신측 MAC 주소 수신측 MAC 주소 상위 계층 프로토콜 종류 01 00 5E 00 00 02 00 07 4F A1 6B FC 08 00 송신측 MAC 주소 NIC 제조회사: Card ID: 수신측 MAC 주소 상위 계층 프로토콜 종류 목적지 주소 근원지 주소 Type 회사 ID Card ID
연습 문제 2 송신측 MAC 주소 수신측 MAC 주소 상위 계층 프로토콜 종류 00 01 02 E8 DF 8D 00 08 E2 44 76 3C 08 00 송신측 MAC 주소 NIC 제조회사: Card ID: 수신측 MAC 주소 상위 계층 프로토콜 종류 목적지 주소 근원지 주소 Type 회사 ID Card ID
Guru를 이용한 이더넷 프레임 분석 연습
이더넷 프레임 켑쳐 프로그램 작성
Microsoft Visual C++ 실행 시작 프로그램 Microsoft Visual Studio 6.0 Microsoft Visual C++ 6.0
새 프로젝트 생성 AppWizard 시작: Visual C++의 File New 메뉴 선택
AppWizard – Step 1
AppWizard – Step 2
AppWizard – Step 3
AppWizard – Step 4
라이브러리 경로 설정 (1) Include 경로: Visual C++의 Directories Show directories for 메뉴 선택
라이브러리 경로 설정 (2) Include 경로: Visual C++의 Directories Show directories for 메뉴 선택
대화상자 디자인 EtherViewer 메인 대화상자 디자인 List Control Check Box Edit Box 8 9 10 1 List Control 2 3 4 5 6 7 Check Box Edit Box Edit Box Button
Control 속성 # 종류 ID 속성 변수 1 List Control IDC_LIST_PacketInfo View: Report CListCtrl m_LIST_PacketInfo 2 Check Box IDC_CHECK_Filter_IP 3 Static Text IDC_STATIC 4 Edit Box IDC_EDIT_CountInput int m_EDIT_iCountInput 5 6 IDC_EDIT_CountOutput Read-Only int m_EDIT_iCountOutput 7 Button IDC_BUTTON_SelectAdaptor 8 IDOK Default Button 9 IDC_BUTTON_ProductInfo 10 IDC_BUTTON_Help
이벤트 처리 # 종류 ID 메시지 함수명 7 Button IDC_BUTTON_SelectAdaptor BN_CLICK OnBUTTONSelectAdaptor() 8 IDOK OnCHECKFilterIP() 9 IDC_BUTTON_ProductInfo OnBUTTONProductInfo() 10 IDC_BUTTON_Help OnBUTTONHelp()
어뎁터 오픈 대화상자 표시 void CEtherViewerDlg::OnBUTTONSelectAdaptor() { //Ncap lib.(Dialog based class lib.) 객체 생성. CSelectAdaptorDlg *pDlg = new CSelectAdaptorDlg; if(pDlg->DoModal() != IDOK) delete pDlg; return; } …
어뎁터 열기 //선택된 네트워크 어뎁터를 사용할 수 있도록 초기화. if(pDlg->OpenAdaptor(m_iFilter_IP)) { ::AfxMessageBox("Adaptor open 실패"); pDlg->CloseAdaptor(); delete pDlg; return; }
패킷 캡쳐 #define MaxBufferLen 2048 UpdateData(TRUE); unsigned char arrTemp[MaxBufferLen]; for(int i=0; i<m_EDIT_iCountInput; i++) { memset(arrTemp, 0, MaxBufferLen); //패킷을 하나 획득함. 음수가 return되면 에러가 발생한 것. if(pDlg->Ncap(arrTemp, MaxBufferLen) < 0) continue; //패킷 분석 … }
패킷 분석 CString strDestMac = _T(""); strDestMac.Format(_T("%02X %02X %02X - %02X %02X %02X"), arrTemp[0], arrTemp[1], arrTemp[2], arrTemp[3], arrTemp[4], arrTemp[5]); m_LIST_PacketInfo.SetItem(i, 2, LVIF_TEXT, strDestMac, 0, 0, 0, 0); CString strSrcMac = _T(""); strSrcMac.Format(_T("%02X %02X %02X - %02X %02X %02X"), arrTemp[6], arrTemp[7], arrTemp[8], arrTemp[9], arrTemp[10], arrTemp[11]); m_LIST_PacketInfo.SetItem(i, 1, LVIF_TEXT, strSrcMac, 0, 0, 0, 0); CString strType = _T(""); unsigned int iTypeORlength = pDlg->Twobytes_to_number(arrTemp[12], arrTemp[13]); strType.Format(_T("%02X %02X(Hex), %d(Decimal)"), arrTemp[12], arrTemp[13], iTypeORlength); m_LIST_PacketInfo.SetItem(i, 3, LVIF_TEXT, strType, 0, 0, 0, 0);
어뎁터 닫기 //사용한 자원 해제. pDlg->CloseAdaptor(); //Ncap lib. 삭제. delete pDlg;
EtherViewer 실행 모습
EtherViewer를 이용한 이더넷 프레임 분석 송신측 MAC 주소 NIC 제조사: 0008E2 Cisco Systems, Card ID: 44763C 수신측 MAC 주소 NIC 제조사: 000102 3COM CORPORATION, Card ID: E8DF8D 상위 계층 프로토콜 종류 0x0806 Internet IP
참고 문헌 서승호 외, AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍, 정익사, 2002. RFC 826, David C. Plummer, An Ethernet Address Resolution Protocol or Converting Network Protocol Addresses to 48 bit Ethernet Address for Transmission on Ethernet Hardware, November 1982. RFC 1060, J. Reynolds J., ASSIGNED NUMBERS, March 1990. RFC 1010, J. Reynolds J., ASSIGNED NUMBERS, May 1987. RFC 1042, J. Reynolds J., A Standard for the Transmission of IP Datagrams over IEEE 802 Network, February 1988. Behrouz Forouzan, “Introduction to Data Communication and Networking”, Mcgrwohill, 1999. Fred Halsall, “Data Communications, Computer Networks and Open Systems”, Addison-wesley, 1995.