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;
}