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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【VS开发】使用WinPcap编程(1)——获取网络设备信息

發布時間:2023/12/20 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【VS开发】使用WinPcap编程(1)——获取网络设备信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

????? pcap_if_t是一個interface數據結構,表明網絡接口的信息。網絡接口就是interface,就是我們用來上網的設備,一般為網卡,還有一些虛擬網卡也算作這樣的接口。它的結構如下:

struct pcap_if {struct pcap_if *next; char *name; char *description; struct pcap_addr *addresses; u_int flags; };typedef struct pcap_if pcap_if_t;

????? 其中的struct pcap_addr為:

struct pcap_addr {struct pcap_addr *next; struct sockaddr *addr; struct sockaddr *netmask; struct sockaddr *broadaddr; struct sockaddr *dstaddr; };

????? 當我們要獲網絡接口的時候,這個數據結構是非常重要的。

????? 這里只說Local host的設備的獲取,對于遠程設備,雖然有方法可以獲取,不過我試了試,總是出錯。

?

????? 首先使用pcap_createsrcstr()函數來初始化一個source,指明我們在哪里查找設備,可以是本地機器,可以是遠程機器,可以是本地文件夾(這樣找的就是存儲好的tcpdump的數據文件)。其函數原型如下:

int pcap_createsrcstr (char *source, int type, const char *host, const char *port, const char *name, char *errbuf)

?

????? 1、source就是我們要存儲的位置信息。

????? 2、type有本地文件、本地機器、遠程機器可供選擇,分別為:PCAP_SRC_FILE,?PCAP_SRC_IFLOCAL,?PCAP_SRC_IFREMOTE

????? 3、host是遠程機器的名字,可以是"1.2.3.4”這樣,也可以是"a.com”這樣。本地為NULL。

????? 4、port為遠程端口。本地為NULL。

????? 5、name為接口的名字。比如eth0。一般為NULL。如果是本地文件就是本地文件夾地址。

????? 6、errbuf存儲錯誤信息。

????? 然后使用函數pcap_findalldevs_ex()這個函數來獲取網絡設備,其原型如下:

int pcap_findalldevs_ex (char * source,struct pcap_rmtauth * auth,pcap_if_t ** alldevs,char * errbuf )

????? 1、source可以使用上面設置好的source,也可以使用:PCAP_SRC_FILE_STRING?或者?PCAP_SRC_IF_STRING,分別是文件和接口的字符串。"file://", "rpcap://"。

????? 2、auth是遠程登錄信息,有用戶名、密碼、類型。用戶名和密碼都是字符指針,類型有:RPCAP_RMTAUTH_NULL?和?RPCAP_RMTAUTH_PWD。參看這里。

????? 3、alldevs用于存儲返回的接口信息。我們要事先定義pcap_if_t *alldevs,這是一個鏈表,存儲接口信息。

????? 4、errbuf出錯信息。

?

????? 這樣所獲得的alldevs就是一個接口的鏈表,如果是文件就是一個文件的鏈表。我們就可以用指針對這些鏈表進行操作了。

????? 最后不用這些設備的時候要把他們釋放掉,使用函數pcap_freealldevs(),其原型如下:

void pcap_freealldevs (pcap_if_t *alldevsp)

?

????? 附上一個源代碼:

#include "pcap.h"int main() {pcap_if_t *alldevs; // pcap_if_t is interface typepcap_if_t *d;char errbuf[PCAP_ERRBUF_SIZE]; // store error informationint i;// struct pcap_rmtauth Ubuntu_cat;char source[PCAP_BUF_SIZE];if (pcap_createsrcstr(source, PCAP_SRC_FILE,NULL, NULL,"E:\\My Documents\\MyProgram\\WinPcapPro\\Read one packet\\Read one packet",errbuf) == -1) {printf("Error in create source string: %s\n", errbuf);exit(-1);}printf("%s\n", source);if(pcap_findalldevs_ex(source, // can be PCAP_SRC_IF_STRING for local hostNULL, // auth to remote host. NULL if local host&alldevs,errbuf) == -1) {printf("Error in find all devices: %s\n", errbuf);exit(1);}d = alldevs;while(d != NULL) {printf("%s\n%s\nAddress: ", d->name, d->description);for (i = 0; d->addresses != NULL && i < 14; i++)printf("%d ", d->addresses->addr->sa_data[i]);printf("\n\n");d = d->next;}pcap_freealldevs(alldevs);return 0; }

轉載于:https://www.cnblogs.com/huty/p/8518339.html

總結

以上是生活随笔為你收集整理的【VS开发】使用WinPcap编程(1)——获取网络设备信息的全部內容,希望文章能夠幫你解決所遇到的問題。

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