c++ winpcap开发(1)

来源:互联网 发布:网路和网络 编辑:程序博客网 时间:2024/06/07 22:52

获取设备列表

通常,基于WinPcap的应用程序的第一件事是获取附加网络适配器的列表。libpcap和WinPcap都为此提供了pcap_findalldevs_ex()函数:该函数返回一个pcap_if结构的链表,每个结构都包含有关连接的适配器的综合信息。特别地,字段名称描述分别包含对应设备的名称和人类可读描述。

以下代码检索适配器列表,并在屏幕上显示,如果没有找到适配器,则打印错误。

#include "pcap.h"main(){    pcap_if_t *alldevs;    pcap_if_t *d;    int i=0;    char errbuf[PCAP_ERRBUF_SIZE];        /* Retrieve the device list from the local machine */    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);    }        /* Print the list */    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;    }    /* We don't need any more the device list. Free it */    pcap_freealldevs(alldevs);}


关于这段代码的一些意见。

首先,像其他libpcap函数一样,pcap_findalldevs_ex()具有一个errbuf参数。此参数指向由libpcap填充的字符串,如果出现问题,则说明错误。

其次,请记住,并不是libpcap支持的所有操作系统都提供了网络接口的描述,因此,如果我们要写一个便携式应用程序,我们必须考虑以下情况:描述为null:我们打印字符串“No description available”in那个情况

最后注意,当我们完成它时,我们用pcap_freealldevs()一次释放列表。

我们来尝试编译并运行第一个示例的代码。为了在Unix或Cygwin下编译它,只需输入:

  gcc -o testprog testprog.c -lpcap

假设我们编译了这个程序,我们来尝试运行它。在特定的WinXP工作站上,我们选择的结果是

   1. \ Device \ NPF_ {4E273621-5161-46C8-895A-48D0E52A0B83}(Realtek RTL8029(AS)以太网适配器)   2. \ Device \ NPF_ {5D24AE04-C486-4A96-83FB-8B5EC6C7F430}(3Com EtherLink PCI)