首页 > 代码库 > 获取设备列表(Microsoft Visual Studio 2010)

获取设备列表(Microsoft Visual Studio 2010)

        通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。libpcap和WinPcap都提供了 pcap_findalldevs_ex() 函数来实现这个功能: 这个函数返回一个 pcap_if 结构的链表, 每个这样的结构都包含了一个适配器的详细信息。值得注意的是,数据域 namedescription 表示一个适配器名称和一个可以让人们理解的描述。

        我们使用Microsoft Visual Studio 2010编译工具编译程序,中WinPcap文档中模块下找到获取设备列表,点击打开便有获取设备列表的程序代码;打开Microsoft Visual Studio 2010编译工具,点击文件,新建项目,然后设置项目名,保存路径可以是改到自己想存的路径,也可以使用默认路径,点击确认,下一步,完成;此时我们对里面的代码进行编译是会出错的,所以接下来点击编译器中的项目-->最下面有个**属性(alt+F7)
配置属性-->清单工具-->输入和输出-->嵌入清单-->否

    这样里面的代码就可以运行了;我们将WinPcap获取设备列表的程序复制到程序中,除了头文件其他都替换掉,此时看到代码中的函数下面是有波浪线的,是的,是因为我们还没有设置,先看代码,代码如下:

// ListInterface.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "pcap.h"


int _tmain(int argc, _TCHAR* argv[])
{
    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 /* auth is not needed */, &alldevs, errbuf) == -1)
    {
        fprintf(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 0;
    }

    /* 不再需要设备列表了,释放它 */
    pcap_freealldevs(alldevs);

}

对编译器做如下设置:

项目-->**属性(alt+F7)
配置属性-->C/C++-->常规-->附加包含目录-->(是把头文件所在的文件路径添加到附加目录中)


项目-->**属性(alt+F7)
配置属性-->链接器-->常规-->附加库目录-->(是把Packet.lib;wpcap.lib添加到附加库目录中)


项目-->**属性(alt+F7)
配置属性-->链接器-->输入-->附加依赖项-->补充“;Packet.lib;wpcap.lib”

项目-->**属性(alt+F7)
配置属性-->C/C++-->预处理器-->预处理器定义-->补充“;HAVE_REMOTE”

下面是获取的结果图:

技术分享


本文出自 “12034896” 博客,转载请与作者联系!

获取设备列表(Microsoft Visual Studio 2010)