日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinPcap笔记(2):获取设备列表

發布時間:2023/11/30 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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):获取设备列表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。