wincap里的PacketGetAdapterNames函数得到的适配器为什么少解决方案

wincap里的PacketGetAdapterNames函数得到的适配器为什么少
我用抓包工具 wireshark可以得到3个适配器。一个无线,一个有线,还有一个VPN。
但是vc里用packet.dll的只有一个适配器,还是一个VPN的,不能用的。用pcap_lookupdev还是不行,只有一个。
这两者有什么区别吗?
wireshark的wincap版本是4.1,我vc里的版本是3.1。但是我用wireshark里的dll去覆盖我程序里的dll后,应该是错误的,PacketGetAdapterNames返回错误了。
------解决方案--------------------
4.0 之后,调用pcap_findalldevs得到所有网络适配器。
------解决方案--------------------
winpcap里面可以用的,我的一点经验如下:
1、下载安装winpcap——http://www.winpcap.org/install/default.htm这个好像你已经可以了。
2、下载http://www.winpcap.org/archive/。找到4.0-WpdPack.zip或者新版本的wpdpack包。
3、wpdpack是一个文件夹,里面有Include文件夹和Lib文件夹。在你的编译器或者工程中加入这些路径。不知到你是什么编译器呢?我是vs2005.项目-属性-C/C++ - 常规 - 附加包含目录。在这个里面加入比如说E:\WpdPack\Include。链接器 - 常规 - 附加库目录。在这个里面加入比如E:\WpdPack\Lib。路径具体看你解压到哪里。
4、链接器 - 输入 - 附加依赖项。在这个里面输入“wpcap.lib空格Packet.lib空格ws2_32.lib空格”
5、代码中加入#include "pcap.h"。
6、pcap_findalldevs函数使用。

pcap_if_t* alldevs;//网卡设备的保存指针
char error_info[256];//错误信息容器
if(pcap_findalldevs(&alldevs,error_info) == -1)
{
    cout << "find device error" << endl;
    return 1;
}
while(true)
{
   if(alldevs == NULL)
   {
      break;
   }
   cout << alldevs->name << endl;              // 网卡设备的名字,非常严肃的一串子字符,抓包就要用到打开这个名字的设备
   cout << alldevs->desciption << endl;        // 网卡设备的描述,平常我们在本地连接属性中看到的网卡的名字
   alldevs = alldevs->next;
}
pcap_freealldevs(alldevs);