獲取設備列表

一般,編寫基於WinPcap應用程序的第一件事情,就是得到已鏈接的網絡適配器列表。libpcap和WinPcap都提供了pcap_findalldevs_ex() 函數來實現這個功能: 這個函數返回一個 pcap_if 結構的鏈表, 每一個這樣的結構都包含了一個適配器的詳細信息。值得注意的是,數據域 name 和 description 表示一個適配器名稱和一個可讓人們理解的描述。網絡

下列代碼能獲取適配器列表,並在屏幕上顯示出來,若是沒有找到適配器,將打印錯誤信息。ide

#include "stdafx.h"函數

#include "pcap.h"工具

int _tmain(int argc, _TCHAR* argv[])spa

{操作系統

pcap_if_t *alldevs;orm

    pcap_if_t *d;blog

    int i=0;接口

    char errbuf[PCAP_ERRBUF_SIZE];ip

    

    /* 獲取本地機器設備列表 */

    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);


}

有關這段代碼的一些說明

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

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

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

在運行這個程序過程當中會遇到一些錯誤,如下是解決錯誤的幾個步驟

項目-->**屬性(alt+F7)

配置屬性-->清單工具-->輸入和輸出-->嵌入清單-->

wKiom1gPD-SBM4uzAAAPfexkUFg817.png-wh_50

項目-->**屬性(alt+F7)

配置屬性-->C/C++-->常規-->附加包含目錄-->

wKiom1gPD_rAzKSPAAAUMeWxrQc714.png-wh_50


項目-->**屬性(alt+F7)

配置屬性-->連接器-->常規-->附加庫目錄-->

wKioL1gPEAnDt3hSAAAS8xEBYXk567.png-wh_50


項目-->**屬性(alt+F7)

配置屬性-->連接器-->輸入-->附加依賴項-->補充「;Packet.lib;wpcap.lib」

wKiom1gPEBTAFfOtAAARlvnDuv4566.png-wh_50

項目-->**屬性(alt+F7)

配置屬性-->C/C++-->預處理器-->預處理器定義-->補充「;HAVE_REMOTE」

wKiom1gPEB7hwJHBAAARYXYrj4M599.png-wh_50


運行結果(Ctrl+F5)

wKiom1gPDBSTT-3LAAAbg4pz_zc347.png

相關文章
相關標籤/搜索