獲取設備列表

通常,編寫基於WinPcap應用程序的第一件事情,就是獲得已連接的網絡適配器列表。libpcap和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);
}

有關這段代碼的一些說明

首先, pcap_findalldevs_ex() ,和其他libpcap函數一樣,有一個 errbuf 參數。一旦發生錯誤,這個參數將會被libpcap寫入字符串類型的錯誤信息。

第二要記住,不是所有的操作系統都支持libpcap提供的網絡程序接口,因此,如果我們想編寫一個可移植的應用程序,我們就必須考慮在什麼情況下, description 是 null。本程序中,我們遇到這種情況時,會打印提示語句"No description available"。

最後要記住,當我們完成了設備列表的使用,我們要調用 pcap_freealldevs() 函數將其佔用的內存資源釋放。

讓我們編譯並運行我們的第一個示例程序吧! 爲了能在Unix或Cygwin平臺上編譯這段程序,需要簡單輸入:


  gcc -o testprog testprog.c -lpcap

在Windows平臺上,您需要創建一個工程,並按照 使用WinPcap編程 裏的步驟做。 然而,我們建議您使用WinPcap developer's pack ( 詳情請訪問WinPcap網站, http://www.winpcap.org ), 因爲它提供了很多已經配置好的範例,包括本教程中的所有示例代碼,以及在編譯運行時需要的 包含文件(include)庫(libraries)

jiash假設我們已經完成了對程序的編譯,那讓我們來運行它吧。在某臺WinXP的電腦上,我們得到的結果是:


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

正如您看到的,Windows平臺下的網絡適配器的名字讀起來相當容易,可見,解釋性的描述是多麼有幫助阿!

wKioL1gPCPfS9yJoAAAgU_wFZNg693.png-wh_50wKiom1gPCRqzJvVDAAEzYRDQhIE473.png-wh_50wKiom1gPCTKAeWnQAAAwK8DPuaI599.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章