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

  下列代码能获取适配器列表,并在屏幕上显示出来,如果没有找到适配器,将打印错误信息。

核心代码:

#include "pcap.h"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 /* 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;
    }    /* 不再需要设备列表了,释放它 */
    pcap_freealldevs(alldevs);
}

int pcap_findalldevs_ex  (    char *     source,    
                                    struct pcap_rmtauth * auth,    
                                     pcap_if_t **     alldevs,    
                                     char *     errbuf    
                                 )

wKiom1gPC8_DBBWGAAATfyWcOjI925.png-wh_50