예전에는 리눅스에서나 가능했던 raw 레벨 패킷 프로그래밍이 Winpcap 라이브러리를 통해서도 가능하게 됬습니다.

사실 winpcap 프로그래밍이 나온지 조금 됬는데 개발환경 구축하는 내용부터 시작해야 할것같아서 포스팅을 합니다.


* 라이브러리 및 설치파일 다운로드 하기

WinPcap_4_1_3.exe

WpdPack_4_1_2.zip

* 라이브러리 레퍼런스

http://www.winpcap.org/docs/docs_40_2/html/group__wpcapfunc.html


0. WinPcap 파일 설치파일 실행하여 설치

1. WpdPack 라이브러리 압축 파일을 다운로드

2. 다운로드한 압축파일을 임의의 디렉토리에 압출풀기 (저는 c:\ 경로에 압출을 풀었습니다.)


3. Visual Studio 2010 실행

4. 프로젝트 -> 속성 클릭

5. 구성 속성 -> VC++ 디렉토리

6. 디렉토리 경로 설정

포함 디렉토리 ->        C:\WpdPack\Include

라이브러리 디렉토리 -> C:\WpdPack\Lib


설정후 아래와 같이 간단한 코딩을 해주자. 

(현재 잡혀있는 네트워크 어댑터를 얻어오는 코드)


  1. #include <stdio.h>
  2. #define HAVE_REMOTE
  3. #include "pcap.h"
  4.  
  5. #pragma comment (lib, "wpcap.lib")  
  6.  
  7.  
  8. void main()
  9. {
  10.     pcap_if_t *alldevs;
  11.     pcap_if_t *d;
  12.     int i=0;
  13.     char errbuf[PCAP_ERRBUF_SIZE];
  14.    
  15.     /* Retrieve the device list from the local machine */
  16.     if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)
  17.     {
  18.         fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
  19.         exit(1);
  20.     }
  21.    
  22.     /* Print the list */
  23.     for(d= alldevs; d != NULL; d= d->next)
  24.     {
  25.         printf("%d. %s", ++i, d->name);
  26.         if (d->description)
  27.             printf(" (%s)\n", d->description);
  28.         else
  29.             printf(" (No description available)\n");
  30.     }
  31.    
  32.     if (== 0)
  33.     {
  34.         printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
  35.         return;
  36.     }
  37.  
  38.     /* We don't need any more the device list. Free it */
  39.     pcap_freealldevs(alldevs);
  40. }


* 관련 링크참조

http://kaspyx.tistory.com/entry/Winpcap-프로그래밍-패킷-감청분석-하기


Posted by 캐스피


티스토리 툴바