TCPIP

2013.08.05_Window에서 Packet Capture 하기 연습

성엽이 2013. 8. 5. 22:53

------ Window 용 WinCap ----------------------------------------------------------------------------------------------------------------

http://www.winpcap.org/ -> Wincap -> Development -> WinCap 4.1.3


WpdPack_4_1_2.zip


----------------------------------------------------------------------------------------------------------------------------------------


 sample.c 수정전 소스

#include < stdio.h >

#include < pcap.h >

#pragma comment(lib, "wpcap.lib")  // linux 에서 gcc -o main main.c -lpcap > 이부분의 
          // -lpcap의 library 추가부분을 윈도우에서 wpcap.lib
          // 부분과 같음

int main()
{
  char ca_EBUF[PCAP_ERRBUF_SIZE];  // pcaplib 의 에러버퍼
  char *cp_Dev;  

  cp_Dev = pcap_lookupdev(ca_EBUF);  // 에러 시 NULL을 출력함

  if0 == cp_Dev )
  {
    printf("[%s]\n", ca_EBUF);  
    return 0;
  }

  printf("LAN Name : [%s]\n", cp_Dev);
  
  return 0;
}


 : 실행하면 위의 그림처럼 뜨는데 VMware 같은 가상 장치번호가 여러개라서 어느 하나 제대로 가져오지 못해서 나타나는 현상이다. 

   이를 수정하여 만들어 보았다. 



 sample.c 수정후 소스

#include < stdio.h >
#define  WIN32  // WIN32가 define 되어있으면 #include <pcap-stdinc.h> 가 추가되고 > 여기안에 winsock2.h 가 포함되어있음.
#include < pcap.h >

#pragma comment(lib, "wpcap.lib")  // linux 에서 gcc -o main main.c -lpcap > 이부분의 
          // -lpcap의 library 추가부분을 윈도우에서 wpcap.lib
          // 부분과 같음

int main()
{
  pcap_if_t *alldevs;  // 장치정보를 집어넣음.
  pcap_if_t *d;    // 검색한 장치정보를 d 에다가 넣어둠.
  int inum;
  int i;
  pcap_t *adhandle;  

  char ca_EBUF[PCAP_ERRBUF_SIZE];  // pcaplib 의 에러버퍼
  char *cp_Dev;  

  if( -1 == pcap_findalldevs(&alldevs, ca_EBUF))
  {
    printf("Error in pcap_findalldevs: %s\n", ca_EBUF);
    return 1;
  }
  
  for(d=alldevs, i=0 ; d != 0 ; d=d->next)  // d 가 NULL이 아니면 > d 가 주소값을 가지고 있지 않으면 중단!
  { 
    printf("%d. %s\n", ++i, d->name);
    
    if0 != d->description)
    {
      printf(" [%s]\n", d->description);
    }
    else
    {
      printf(" (설명없음)\n");
    }
  }

  return 0;
}



 


  : WinCap 안에 있는 Examples-pcap 폴더안에 basic_dump.c 에 findalldevs() 함수를 이용 모든 장치번호를 찾아주게하여 소스를 수정하였다. 

basic_dump.c