winPcap學習筆記1_擷取裝置列表)

來源:互聯網
上載者:User

通常,編寫基於WinPcap應用程式的第一件事情,就是獲得已串連的網路介面卡列表。libpcap和WinPcap都提供了 pcap_findalldevs_ex() 函數來實現這個功能: 這個函數返回一個 pcap_if 結構的鏈表, 每個這樣的結構都包含了一個適配器的詳細資料。值得注意的是,資料域 name 和 description 表示一個適配器名稱和一個可以讓人們理解的描述。

下列代碼能擷取適配器列表,並在螢幕上顯示出來,如果沒有找到適配器,將列印錯誤資訊。

 

 1 #include "pcap.h"
2
3 main()
4 {
5 pcap_if_t *alldevs;
6 pcap_if_t *d;
7 int i=0;
8 char errbuf[PCAP_ERRBUF_SIZE];
9
10 /* 擷取本地機器裝置列表 */
11 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)
12 {
13 fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
14 exit(1);
15 }
16
17 /* 列印列表 */
18 for(d= alldevs; d != NULL; d= d->next)
19 {
20 printf("%d. %s", ++i, d->name);
21 if (d->description)
22 printf(" (%s)\n", d->description);
23 else
24 printf(" (No description available)\n");
25 }
26
27 if (i == 0)
28 {
29 printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
30 return;
31 }
32
33 /* 不再需要裝置列表了,釋放它 */
34 pcap_freealldevs(alldevs);
35 }
36
37  

有關這段代碼的一些說明

首先, 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平台下的網路介面卡的名字讀起來相當容易,可見,解釋性的描述是多麼有協助阿!

 

原作者:The WinPcap Team  首頁: http://www.winpcap.org

 

 

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.