본문 바로가기

기타 개발 스킬

패킷 분석 툴, 와이어샤크(WireShark) 사용법 (필터링, 검증, 처음 사용해보는 사람을 위한 안내)

반응형

와이어샤크(Wireshark)

와이퍼샤크는 오픈 소스 패킷 분석 프로그램으로 "pcap"을 이용하여 패킷을 잡아내는 것이 주요 기능이다.

윈도우뿐만 아니라 리눅스같은 유닉스 계열의 운영체제에서도 사용된다.

무차별 모드(promiscuous mode)를 지원해서 나한테 들어오고 나가는 패킷만 얻을 수 있는 것이 아니라 브로드캐스트나 멀티캐스트 트래픽도 얻을 수 있다. (100% 모든 것을 확인할 수 있는 것은 아님.)

* 여기서 사용 목적이 좀 나뉠 수 있다.

패킷을 분석하는 툴이기 때문에 해당 패킷을 보고 싶은 사람이 사용할 수도 있고, pcap 라이브러리를 이용해서 패킷 분석 프로그램을 개발할 수도 있다.

또한 패킷 복호화를 통해 해킹(?)을 해볼 수 있고, 보안을 배울 수도 있다.

하지만, 나 같은 일반적인 개발자(?)들은 내 컴퓨터에서 데이터가 잘 나가고 들어오는지 정도만 확인하면 되기 때문에 그 목적에 맞춘다.


와이어샤크 설치

간단하게 와이어 샤크 설치 방법을 설명한다. (다운로드 링크 : https://www.wireshark.org/download.html)

stable release에서 운영체제에 맞는 것을 설치한다.

1. 설치 시작

2. 웬만한 것들은 설치를 한다. (User's Guide는 굳이 없어도 됨.)

3. 핵심! pcap를 이용해서 패킷을 캡쳐하기 때문에 반드시 설치해야한다.

4. next로 설치를 진행하다보면 중간에 WinPcap을 설치하겠냐는 창이 뜬다. 그것까지 설치해주면 완료.


와이어샤크 사용법

와이어샤크를 사용하는 방법은 정말 쉽다. (물론 기초적인 것이 목표이기 때문이지만..)

와이어샤크 처음 실행하면 위와 같은 화면이 뜬다.

가운데 빨간색 박스를 보면 자동으로 와이어샤크가 이더넷 인터페이스를 찾아놨다.

따라서 해당 부분을 클릭하면 왼쪽 상단에 상어지느러미 모양이 활성화되는데 이것을 누르면 해당 이더넷 인터페이스에서 오고 가는 패킷들을 찾아준다.

이런식으로 오고가는 패킷을 실시간으로 잡아내는 것을 확인할 수 있다.

상단쪽에 컬러풀(?)한 곳을 보면 해당 패킷이 어디서 보냈고 어디로 받았는지와 프로토콜의 정보등을 볼 수 있다.

  • No. : 패킷을 수집한 순서
  • Time : 패킷이 수집된 시간
  • Source : 패킷을 보낸 주소
  • Destination : 패킷 도착 주소
  • Protocol : 프로토콜 정보
  • Length : 패킷의 길이
  • Info : 패킷 정보

이 부분만 확인해도 대략적인 정보를 얻을 수 있다.

예를 들어 "소켓을 이용해서 긴 메시지를 보낸다고 할 때 잘 가는지를 확인하려면" TCP 프로토콜로 내 ip(Source)에서 도착지로 패킷이 얼마나(length) 갔는지를 확인할 수 있다.

뭔가 에러가 있을 때는 빨간색 혹은 검은색으로 패킷이 오고 가는 것을 확인할 수 있다. (색 변경가능)

데이터 한개 보냈을 때 패킷 수를 알고 있으면 데이터가 10만개가 잘 갔는지도 확인할 수 있다.

그리고 만약에 패킷 수집을 그만하고 싶으면 상어지느러미 옆에 중지버튼을 누르면 된다.


패킷 필터링

사실 위와 같이 그냥 start버튼으로 패킷을 수집해버리면 원하는 패킷만 보고 싶은데 다른 패킷들도 다 수집해버려서 보기 어렵다.

그래서 그런 문제를 해결하기 위해 필터링을 제공한다.

두 가지의 필터링 방식이 있는데 중요한 것은 아니므로 쉽게 설명하도록 한다.

1. 애초에 패킷 수집 자체에 필터를 걸어서 필터링에 적용된 패킷만 받는 방법(성능에 영향을 끼칠 수 있음..)

2. 오가는 패킷 전체를 수집한 후, 내가 화면에서 볼 것만 필터링하는 방법(권장, 다양한 연산이 사용가능함)

1을 캡쳐필터라고하고 2를 디스플레이 필터라고 한다는 것만 알고 넘어간다.

위에 상단바에 보면 "Apply a display filter" 라고 쓰여있는 공간이 있다. (위 그림에서 ip라고 적힌 부분)

이 곳에다가 원하는 필터링 식을 적용하거나 상단 메뉴에 Analyze > Display Filters... 에 들어가서 적용할 수 있다.

또한 위에 그림처럼 ip만 쳐도 사용할 수 있는 필터의 예시를 알려준다.

예를들어 "ip.addr == 192.0.2.1" 이라고 적용하면 source든 destination이든 아이피가 해당 아이피인 패킷만 볼 수 있다.

- 유용한 필터링 식

  • eth.addr == 00:3f:1e:00:00:23 //출발지나 목적지 MAC 주소로 검색
  • ip.addr == 192.168.0.2 // 출발지나 목적지 IP주소로 검색
  • tcp.port == 3306 // TCP 출발지나 목적지 포트 번호로 검색
  • ip.src != 10.1.2.3 // 출발지 IP주소가 해당 IP주소가 아닌것 검색
  • eth.dst == 00:3f:1e:00:00:23 // 목적지 MAC주소 검색

기타 비교 연산자나 논리 표현도 가능해서 아주 다양하게 적용할 수도 있다.


* 추가적으로 단순하게 패킷만 볼 것이 아니라 패킷들을 세션별로 조립해서 내용까지도 확인해볼 수 있다.

(물론 따로 설명하진 않았지만 프로그램 중간에 패킷에 대한 자세한 정보를 볼 수도 있고 프로그램 하단에 패킷을 HEX (16진수 바이트)로 볼 수도 있다.)

- 세션별로 조립한 것을 Stream이라고 하는데 밑에 예제에서는 TCP로 통신되고 있는 패킷들을 조립해서 내용을 확인해본 것이다.

여러가지 스트림을 제공하고 있으니 확인해보면 좋을 듯하다.

위와 같이 확인할 수 있다. 하지만 항상 위처럼 깔끔하게 나오는 것은 아니다. 인코딩이 다를 수도 있고 온전히 해석하기 어려울 수도 있다.

따라서 좀 더 알아보고 사용하도록하고 원래 취지대로 데이터를 잘 보내고 잘 받았는지 확인하는 용도로 와이어샤크를 사용해보도록 하자.

반응형