WinPcap 编程

首先先大体介绍下Winpcap。  

winpcap(windows packet capture)windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:  

1> 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;  

2> 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉; 

3> 在网络上发送原始的数据包; 

4> 收集网络通信过程中的统计信息。


下面说一下在编译Winpcap之前要做的事情

1 下载Winpcap安装包,地址http://www.winpcap.org/install/default.htm。  

2 然后到  http://www.winpcap.org/devel.htm下载WinPcap developer's pack包,解压,里面有配置好的例子和include library。  

3 在VC6.0菜单中,点Tolls->Options->Directories中的include files 和library files中添加包里面的include和library。     


然后我们就来编写一个最简单的Winpcap程序——获取已连接的网络适配器列表。  

首先新建一个工程,选择Win32 Console Application,工程名我们设为winpcap.然后这这个工程中新建一个C++源文件,名字winpcap。

在里面填写如下代码:  

#include <pcap.h> 

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "wpcap.lib")

void main( ) 

{  

pcap_if_t *alldevs = NULL; 

pcap_if_t *d = NULL; 

int i=0;  

char errbuf[PCAP_ERRBUF_SIZE] = {0};      

if (pcap_findalldevs(&alldevs, errbuf) == -1) {  

printf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); 

exit(1);  

}      


for (d= alldevs; d != NULL; d= d->next) {  

printf("%d. %s", ++i, d->name);  

if (d->description)  

printf(" (%s)\n", d->description); 

else  

printf(" (No description available)\n"); 

}   


if (i == 0) {  

printf("\nNo interfaces found! Make sure WinPcap is installed.\n");  

return -1; 

}       

pcap_freealldevs(alldevs); 

return 0; 

}  


PS:细心的人会发现,这里用来获取网络适配器信息的函数为pcap_findalldevs(), 和Winpcap documentation里面的例子不同,它那里用的函数是pcap_findalldevs_ex(),这个函数的参数有四个,这两个函数的定义及参数问题,在帮助文档上都很详细,这里也不说了。 

要是用这个函数的话,编译时会有错误,说pcap_findalldevs_ex()未定义,为什么呢?因为我们这里头文件只包含了winpcap.h,在这个头文件里,你会发现并没有pcap_findalldevs_ex()这个函数的定义,而只有pcap_findalldevs()的定义。那么怎么办呢?

两个方法,一,在#include <pcap.h>前面加上一个预处理程序定义#define HAVE_REMOTE。

二,直接加上#include <remote_ext.h>,因为在这个文件里有pcap_findalldevs_ex()的函数定义。

其实第一种方法也就变相的调用remote_ext.h这个文件,其过程大家可以在pcap.h中找到。     

PS2:为什么前面已经设置了路径了,函数编译的时候为什么还的手动添加动态链接库?

因为这个路径只是告诉它在哪里找,也就是说,只是个路径提示。就像include <pcap.h>一样,它也是在Directories设置的include文件中的,但是我们在程序的开头还的包括这个头文件,这个道理是一样的。    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值