항상 기분좋게 긍정적으로 스마일~


Posted
Filed under IT Story/Solution



먼저 프로그램이 필요하겠지요.

http://www.wireshark.org/ 이곳에서 안정버전을 다운로드 받아서 설치하시고 다음의 강좌를 보시기 바라겠습니다.

, 설치할 때 winpcap 드라이버를 설치하겠느냐고 물어보는데 같이 설치하셔야 합니다. 네트워크의 패킷을 수집하는 녀석은 winpcap 드라이버가 하는 일이고, 그것을 수집해서 파일로 떨구거나 분석 해 주는 부분이 ethereal이 하는 일입니다. pcap이라는 의미가 packet capture의 줄임말입니다. 다운로드방법이나 설치방법을 설명하느라 공간을 낭비하진 않겠습니다.

 

목차

2. Wireshark 기본적인 툴 사용법

2.1 이 툴은 무엇?

2.2 어떻게 캡쳐하나요?

2.3 캡쳐한 데이터는 어떻게 사용하나요?

2.4 보다 전문적인 사용법을 위해서는 (TIP)

2.5 원하는 프로그램에 사용하기 위한 코드는?

 

2.1 이 툴은 무엇?

앞에서 언급한 네트워크 패킷을 캡쳐하는 프로그램입니다.

, 네트워크 카드로 들어오는 RAW(가공되지 않은) 패킷들을 집적 받아볼 수 있는 프로그램이란 얘기지요. 더군다나, 알려진 프로토콜 중에서 일부분에 대해서는 직접 파싱을 하여 내용을 보여주기도 합니다. (TCP/IP 같은 공개된 프로토콜의 경우에는 파싱해서 내용을 다 보여줍니다) 또 무료로 사용할 수 있으니 대중적으로 사랑받는 프로그램이 아닐 수 없겠지요.

 

지겹긴 하지만, 프로그램의 특징에 대해서 나열해야 할 것 같습니다.

내용은 wireshark.org 에 있는 내용 중에서 발췌했으며, 알아두어야 할 부분을 정리하겠습니다.

 

-       몇백개의 프로토콜을 분석할 수 있으며 계속 추가되고 있음

-       멀티플랫폼에서 사용 가능함 (Windows / Linux / Solaris / OS X )

-       여러 개의 파일포맷을 읽고/쓰기 가능 (tcpdump, Microsot Network Monitor )

-       캡쳐하면서 gzip으로 압축 가능

-       Ethernet / IEEE802.11, PPP/HDLC 등을 읽어들일 수 있음

-       패킷을 분석하면서 색상을 적용하여 분석해 줌

-       암호화 패킷들을 분석해 줌 (IPsec, Kerberos, SSL/TLS )

-       XML 등으로 내보낼 수 있음

 

대충 이정도로 정리할 수 있겠습니다.

 

잠깐! 본 강좌에서는 WinPCAP 드라이버를 사용하기 때문에 802.11 등의 무선 프로토콜은 캡쳐하지 못합니다. 강좌를 따라하다가 왜 내 노트북 네트워크 카드는 안나와!!’ 라고 소리치지 마시고, 꼭 무선랜이 아닌 유선랜을 사용해야 한다는 것을 기억 해 주시기 바랍니다. 만약 무선랜 패킷을 캡쳐하시려면 wireshark.org 내에서 AirPCAP 이라는 드라이버를 별도로 구매하셔야 합니다. 가격은 기능에 따라서 대충 20만원에서부터 60만원대 까지 다양하게 있습니다.

 

2.2 어떻게 캡쳐하나요?

일단 wireshark를 실행시킵니다. 그러면 아래와 같은 황당한 화면이 나옵니다.

사용자 삽입 이미지

설명도 없고, 아무런 UI도 안보입니다. 단지 메뉴와 도구버튼만 있을 뿐. .

일단 행동으로 옮겨보도록 하지요.

 

Capture 메뉴버튼을 누르고 맨 위의 Interfaces… 항목을 선택합니다. 아래 같은 창이 열립니다.

 

사용자 삽입 이미지

 

여기에 현재 자신이 가지고 있는 Ethernet 카드 들이 보이게 됩니다. (다시 한 번 말씀드리지만 무선 랜카드일 경우에는 AirPCap 드라이버를 구매/설치하지 않았을 경우 나오지 않습니다)

 

궁금한 내용은 사항은 왼쪽 하단의 ‘Help’ 형님께 맡겨두도록 하고 일단 캡쳐를 하기 위한 준비를 하도록 하지요.

먼저 자신의 실제 네트워크 카드가 무엇인지를 알아야 합니다. 저 같은 경우에는 Realtek 어쩌구.. 가 실제 네트워크 카드가 되겠습니다. 그럼 그 카드 옆에 있는 ‘Start’ 버튼을 눌러주시면 바로 패킷이 수집되기 시작합니다.

 

오오.. 드뎌 휑 하던 메인화면에 무엇인가 복잡한 글씨들이 보이기 시작합니다.

 

사용자 삽입 이미지

 

, 대충 화면을 구경했으니 Capture -> Stop 을 누르시던지, Ctrl + E 를 누르시던지, 아니면 도구모음의 Stop Capture 버튼을 눌러서 수집을 종료 해 주시기 바랍니다. (도구모음에 마우스를 갖다대면 풍선이 뜹니다)

참, 광랜의 속도로 다운로드 받으면서 Start 버튼을 눌러서 다운받지는 마시기 바랍니다. 컴터가 버틸지 장담 못합니다.

자세한 내용은 다음장에서 다시 설명 드리도록 하고, 수집하는 방법에 대해서 한 가지의 방법을 더 설명 드리도록 하겠습니다.

 

대충 어떻게 수집하는지는 알았는데, 원하는 프로토콜 ( TCP) 만을 잡는법을 알려드리겠습니다.

 

패킷의 수집을 종료시켰으면, 다시 Capture->Interfaces… 항목을 선택하시기 바랍니다.

위에 나와있는 그림을 참조하시고, 수집하고자 하는 네트워크 카드 항목의 우측에 Start 버튼 대신에 Option 버튼을 눌러주시기 바랍니다.

 

 

사용자 삽입 이미지

 

파일이나 기타 등등은 다 무시하시고, Capture Filter 항목을 보시기 바랍니다.

그곳에 다음과 같이 적어봅니다. (앞으로 따옴표는 빼세요)

‘tcp’

그리고는 맨 아랫쪽에 있는 Start 버튼을 눌러보시기 바랍니다. 패킷이 잘 수집되지 않을 경우에는 인터넷을 띄우고, 메신저 통신을 좀 해 보시면 아주 주루룩~ 하고 데이터들이 수집되는 것을 확인하실 수 있습니다.

  

사용자 삽입 이미지

 

머 대충 이 정도의 메시지 들이 나올 것이라 생각됩니다.

 

2.3 캡쳐한 데이터는 어떻게 사용하나요?

, 타이틀을 그냥 처음에 정했던 것으로 가자니 좀 우습게 되어버렸습니다만..

어쨌건 이번에는 수집한 데이터를 어떻게 보는지에 대해서 알려드리겠습니다.

 

일단 위와 같은 화면을 다들 보셨다는 가정하에 내용을 설명드립니다. (자꾸 언급합니다만, 자세한 사항은 Help 형님에게 ^^)

 

메인 화면에는 세 가지의 창이 있습니다.

맨 위에 창은 수집한 패킷들을 정렬하여 간단한 대표정보만을 보여주고 있습니다.

두 번째 창에서는 현재 선택한 패킷에 대한 상세 정보를 파싱하여 보여주고 있습니다.

세 번째 창에서는 실제 수집한 데이터를 표시 해 주고 있습니다.

 

먼저 맨 위에 창의 내용을 요약해보겠습니다.

순서대로 No, Time, Source, Destination, Protocol, Info 등이 보이는데요.

각각의 항목은 다음과 같습니다.

 

-       No : 패킷의 순번을 가리킵니다.

-       Time: 시간을 microsecond 단위까지 보여줍니다 (상당히 유용하죠)

-       Source: 패킷을 보낸쪽의 주소입니다.

-       Destination : 패킷을 받는쪽의 주소입니다.

-       Info: 패킷의 주요 내용을 요약해서 보여줍니다.

 

굳이 설명 드리지 않아도 충분히 아실 거라 생각됩니다. 중요한 것은 두 번째 창과 세 번째 창의 내용을 볼 줄 알아야 한다는 것입니다.

 

두 번째 창에서 나오는 내용은 패킷의 내용을 파싱 한 경우입니다. 위의 예제에선 TCP 항목을 파싱하였기 때문에 내용은 (data) 영역에 그냥 뿌려지지만 나머지 헤더의 내용들은 모두 파싱해서 메뉴트리 형태로 보여주고 있습니다. 대충 내용을 예로들어 볼까요?

 

 

사용자 삽입 이미지

 

중간에 Internet Protocol (TCP/IP 중의 IP 영역입니다) 헤더를 확장하여 보았습니다.

마우스로 해당 항목을 클릭 할 경우 실제 패킷의 내용 중 어디에 해당하는지 아래에 표기가 되며 그것이 어떤 내용을 뜻하는지 보여주고 있습니다.

 

저번 강좌에 있었던 내용 중 하나를 복습해볼까요?

 

0xC0 0xA8 0x02 0x6F 값이 192.168.2.111 이라는 값으로 파싱되었네요. 어떻게 한 것일까요?

그냥 C0 10진수로 하면 192가 됩니다. 마찬가지로 A8 168이란 값이겠죠. 이렇게 16진수 값을 단순하게 10진수로 변경만 하면 원하는 값이 나오게 되네요. IP 주소를 전달하는게 무척 간단하지요?

물론 이처럼 단순하게 1바이트(CHAR) 10진수로 변경하면 맞는 값이 나오는 경우도 있지만 그렇지 않은 경우가 더 많겠죠. 왜 그런걸까요? 프로토콜이니까.. 만든 사람 마음대로니까.. 라고 할 수 있겠습니다요.

 

2.4 보다 전문적인 사용법을 위해서는 (TIP)

거창하게 제목이 붙었습니다만, 슬슬 제가 강좌를 쓰면서도 지겨워지기 시작해서, 간단하게 몇 가지만 알려드리겠습니다. 제가 지겨운데 읽는 분들은 오죽 하시겠습니까.

 

-       데이터 수집 시 원하는 내용만 필터링 하기

-       모은 데이터를 편하게 볼 수 있도록 필터링 하기

-       패킷 데이터를 파일에 저장하기

-       모은 데이터를 다른 프로토콜로 파싱하기

 

- 데이터 수집 시 원하는 내용만 필터링 하기

특정 IP와 특정 포트의 TCP 데이터를 수집하고자 할 경우에 다음과 같이 적습니다.

‘host 192.168.0.1 and tcp port 3333’

위와 같은 경우는 특정 Application이 통신하는 내용을 확인하고자 할 때 사용합니다. 앞의 host 대신에 source destination을 사용할 수 있습니다.

 

- 모은 데이터를 편하게 볼 수 있도록 필터링 하기

몇 가지의 방법이 있지만, 수집 시 필터링을 못하였다 하더라도 모은 데이터에 Filter 항목에 내용을 적용함으로써 데이터를 필터링 할 수 있습니다. 예를 들어봅니다

화면 상단의 도구모음 바로 밑에 Filter 항목에 ip.dst == 192.168.2.111 라고 적는다고 가정합니다.

위와 같이 적을 경우 destination ip 주소가 192.168.2.111인 경우를 다 보여주게 됩니다.

Filter 항목은 워낙에 다양해서 다 설명드릴수가 없습니다. 사실 Expression 항목을 눌러보시면 그 양이 얼마나 방대한지를 아실 수 있으리라 생각됩니다. 그리고, 다 알려고 하지 않으셔도 됩니다.

어쨌든 내용을 적용하려면 Apply를 눌러 데이터를 필터링하세요.

 

- 패킷 데이터를 파일에 저장하기

저장하는 방법에는 두 가지 방법이 있습니다. 수집을 완료해서 정지시킨 후에 저장하는 방법이 첫 번째이고, 수집하기 전 위에서 언급하였던 Options 항목을 통해 수집 방식을 설정하여 저장하는 것이 가능합니다.

Capture File(s) 항목에서 저장 옵션을 정할 수 있으며 대표적인 기능으로는, 크기별로 나누어 저장하기, 일정한 크기나 파일수에 도달하면 수집 종료하기, 일정 파일수에 도달하면 기존 파일 덮어써서 저장하기 등등이 있겠네요. 효율적으로 저장하기 위해서는 여러가지 옵션을 사용하여 저장해야 할 것입니다. 실제 서버에서는 몇초만에 1GB의 데이터가 저장이 되어버리는 경우도 많이 보았습니다. 유용한 옵션이죠.

 

- 모은 데이터를 다른 프로토콜로 파싱하기

, 자주 사용되는 항목은 아닙니다만, 만약 TCP 데이터임에도 불구하고 다른 필터를 적용해서 해독하고자 할 경우에는 (종종 프로그램이 프로토콜 종류를 인식하지 못하기도 합니다) 이것을 사용하게 됩니다. 예를 들어 TCP로 전송 된 메신저 프로토콜은 wireshark에서 ‘MSNMS’ 프로토콜로 자동 인식하여 파싱하여 주지만, 자동으로 변환하지 못할 경우에는 사용자가 직접 그 프로토콜로 강제변환 시킬 수 있다는 의미입니다.

방법은 첫 번째 창에서 오른쪽 버튼을 눌러 ‘Decode As’ 항목을 눌러서 선택하시면 되겠습니다.

 

자세한 내용은 책을 펴고 공부를 좀 해 보시거나 Help 형님을 꼭 불러주세요.

 

2.5 원하는 프로그램에 사용하기 위한 코드는?

, 이번 강좌의 마지막입니다만..

근데 뜬금없이 여기서 코드를 나열하는 것도 우습고, devpia에 강좌를 올릴 때 코드 하나 잘못올리면 엄청나게 욕먹는다는 얘길 들어서 강좌 전체에 코드를 싹 빼버릴까 하는 심각한 고려를 하고 있습니다. 워낙에 고수 분들이 많으셔서 사실 코드를 올리는 것도 겁나네요. 소심한 A형이라.. ㅋㅋ

 

어쨌든 이번 강좌에는 코드부가 빠졌습니다.

사실 wireshark로 덤프시킨 패킷을 실제 프로그램에서 사용할 수 있는 코드를 샘플로 넣어드리고자 했습니다만, 강좌 전체에 코드를 넣을까 말까 계속 고민 해 보고 결정하겠습니다.

 

, 그리고 다음 번 강좌 내용을 좀 변경할까 생각 중입니다.

챕터 하나가 추가될 수 있고 아니면 필요한 내용만 끼워넣을 수도 있겠네요.

그리고 까막(crowback__)님의 유틸리티를 언제 올려드려야 하는 지 순서도 지금 못정하겠네요. .

 

일단 wireshark로 이것저것 패킷을 수집하셔서 데이터를 보시다 보면 참 재미있을 것이라 생각됩니다. 솔직히 TCP/IP 프로토콜 책 한 권을 옆에 두고서 공부한다면 금상첨화이겠지만, 강좌를 따라오는 데에는 그 정도까지의 지식은 필요치 않습니다. 그냥 재밌게 보시길 바랍니다. 신기한 정보들이 참 많이 왔다갔다 합니다.

 

몸이 아파서 휙 잠적해 버릴까 생각도 해 보았는데 꾸준하게 몇 분이서 올려달라고 해 주셔서 감사한 마음에 이번 장 올립니다.

틀린 내용이나 지적하실 내용이 있으면 언제든지 남겨주시길 바랍니다.


항상 말씀드리지만, 마지막까지 읽느라 고생하셨습니다. 홧팅~

 

B/R

Hopi


[출처] http://www.devpia.com/maeul/contents/d ··· o%3D8042





2008/07/02 09:25 2008/07/02 09:25