在VS2010中使用WpdPack

来源:互联网 发布:崔永元 转基因 知乎 编辑:程序博客网 时间:2024/06/06 00:54

1.

在正式WinPcap编程之前,要配置运行环境。 

Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:

wpcap.dll

Packet.dll

WanPacket.dll

pthreadVC.dll

这四个动态链接库在WinPcap驱动程序里,下载地址:http://www.winpcap.org/install/default.htm


2.

下载WinPcap SDK,即WpdPack WinPcap,下载地址:http://www.winpcap.org/devel.htm

SDk里面包含库文件,头文件,文档文件和一些例子。 解压缩后把Include目录添加到IDE的包含文件中:

WpdPack_4_1_2\Include\pcap

WpdPack_4_1_2\Include


3.

WpdPack_4_1_2\Lib中的2个库添加到资源文件中


4.

由于是在Windows下编程,需要在WpdPack_4_1_2\Include\pcap\pcap.h文件中加一句:#define WIN32


现在我们就可以进行WinPcap编程了 ^_^


库函数请参考http://blog.csdn.net/worldzhy/article/details/8233351


下面是一个可以运行的程序

#include <stdio.h>
#include <ctype.h>
#include <pcap.h>


#define MAXBYTES2CAPTURE 2048 

void processPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet)

int i = 0, *counter = (int *)arg; 
  
printf("Pcaket Count: %d\n", ++(*counter)); 
printf("Received Packet Size: %d\n", pkthdr->len); 
printf("Payload:\n"); 
for (i=0; i<pkthdr->len; i++){ 
  if ( isprint(packet[i]) ) 
printf("%c ", packet[i]); 
else 
printf(". "); 
if ( (i%16 == 0 && i!=0) || i==pkthdr->len-1)   
printf("\n"); 
}

 
int main() 

int i=0, count=0; 
pcap_t *descr = NULL; 
char errbuf[PCAP_ERRBUF_SIZE], *device = NULL; 
memset(errbuf, 0, PCAP_ERRBUF_SIZE); 
 
/*获取第一个适合捕获的网络设备名称*/ 
device = pcap_lookupdev(errbuf); 
 
printf("Opening device %s\n", device); 
    
/*以混杂模式打开网络设备*/ 
descr = pcap_open_live(device, MAXBYTES2CAPTURE, 1, 512, errbuf); 
 
/*死循环并在每一次接收到数据包时调用回调函数processPacket()*/ 
pcap_loop(descr, -1, processPacket, (u_char *)&count); 
 
return 0; 
}


原创粉丝点击