WinPcap笔记(2):获取设备列表
通常,編寫基于WinPcap應用程序的第一件事情,就是獲得已連接的網絡適配器列表。WinPcap提供了pcap_findalldevs_ex()函數來實現這個功能:返回一個pcap_if結構的鏈表,這樣的結構都包含了一個適配器的詳細信息。pcap_findalldevs_ex()函數的具體格式如下:
pcap_findalldevs_ex(char * source,struct pcap_rmthauth* auth,pcap_if_t** alldevs,char* errbuf);函數創建一個可以被函數pcap_open()打開的網絡設備鏈表。這個函數不但可以列出本地機器的所有設備,還可以列出遠程機器的所有設備。
參數含義:
source:一個字符指針,保存來源的位置,會在查找適配器的時候檢查,在這里設置成PCAP_SRC_IF_STRING;
auth:一個指向pcap_rmtauth結構體的指針。這個指針保存需要遠程設備捕獲協議認證的信息。由于我們捕本地設備,因此設置成NULL;
alldevs:一個pcap_if_t結構體指針,函數返回時用來保存找到的適配器的信息;
errbuf:用來保存錯誤信息;
返回值:
如果返回0,表示函數運行成功,此時alldevs不可能是NULL,說明找到合適的適配器,同過alldevs參數返回;如果返回-1,發生錯誤,或者沒有在本地找到合適的適配器;
pcap_if_t結構體定義如下:
pcap_if* next;//指向鏈表的下一個節點,如果不為空指向一個pcap_if元素;
char* name;//字符串指針,存儲傳向pcap_open_live函數的設備名稱;
char* description;//設備的描述;
pcap_addr* addresses;//這項這個設備接口地址鏈表的第一個元素;
u_int flags;//當前唯一的值是PCAP_IF_LOOPBACK,當當前接口是回路接口的時候設置;
當我們完成設備列表的使用后,應當調用pcap_freealldevs()函數釋放內存資源。
下面是獲取設備列表并打印具體信息的代碼:
#include "pcap.h"int 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);elseprintf(" (No description available)\n");}if (i == 0){printf("\n No interfaces found!\n");exit(1);}//freepcap_freealldevs(alldevs); return 0; }結果如下:總結
以上是生活随笔為你收集整理的WinPcap笔记(2):获取设备列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 狗头人怎么出装怎么玩?
- 下一篇: 该怎样去预防卵巢早衰