您的位置:首页 > 其它

winpcap学习(二)获取设备列表

2014-12-05 13:36 302 查看
原文:http://www.ferrisxu.com/WinPcap/html/index.html

获取设备列表

libpcap和WinPcap都提供了pcap_findalldevs_ex()函数来实现这个功能:这个函数返回一个pcap_if结构的链表,每个这样的结构都包含了一个适配器的详细信息。值得注意的是,数据域name和descripting表示一个适配器名称和一个可以让人们理解 的描述。

#include <iostream>
#include <pcap.h>

int main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int i=0;
char errbuf[PCAP_ERRBUF_SIZE];
if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==-1)
{
std::cerr<<"Error in pcap_findalldevs_ex:"<<errbuf<<std::endl;
exit(1);
}
for(d=alldevs;d!=NULL;d=d->next)
{
std::cout<<++i<<"."<<d->name;
if(d->description)
std::cout<<"("<<d->description<<")"<<std::endl;
else
std::cout<<"(No descripton available)"<<std::endl;
}
if(i==0)
std::cout<<std::endl<<"No interfaces found! Make sure WinPcap is installed"<<std::endl;
pcap_freealldevs(alldevs);
return 0;
}

首先,pcap_findalldevs_ex(),和其他libpcap函数一样,有一个errbuf参数。一旦发生错误,这个参数将会被libpcap写入字符串类型的错误信息。
第二要记住,不是所有操作系统都支持libpcap提供的网络程序接口,因此,如果我们想写一个可移值的应用程序,我们就必须考虑在什么情况下,description是null。
最后要记住,当我们完成了设备列表的使用,我们要调用pcap_freealldevs()函数将其占用的内存资源释放。
需要注意的是要在工程中设置好include路径及包含wpcap.lib库,并设置宏定义WPCAP和HAVE_REMOTE。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: