------ 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을 출력함
if( 0 == 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); if( 0 != d->description) { printf(" [%s]\n", d->description); } else { printf(" (설명없음)\n"); } }
return 0; } |
: WinCap 안에 있는 Examples-pcap 폴더안에 basic_dump.c 에 findalldevs() 함수를 이용 모든 장치번호를 찾아주게하여 소스를 수정하였다. basic_dump.c |