大家好,既然我们上一节已经搭配好了环境,那么我们就开始Winpcap的学习吧。
那么第一节就带来最基础的第一步,获取设备列表,也就是获得你电脑上的网卡设备的状态,专业点讲就是获得已连接的网络适配器列表。
本节所用函数API讲解如下:
1.获取网络适配器表
int pcap_findalldevs_ex ( char * source, struct pcap_rmtauth * auth, pcap_if_t ** alldevs, char * errbuf )这个函数的作用就是创建一个网络适配器列表。
声明一个 pcap_if_t 结构体指针。将它的地址传到该函数中,则会得到赋值。
pcap_if_t *alldevs;调用实例
pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf);2.释放网络适配器列表
void pcap_freealldevs ( pcap_if_t * alldevsp )调用实例
pcap_freealldevs(alldevs);
#include <stdio.h> #include <stdlib.h> #include <pcap.h> int main(){ pcap_if_t * alldevs; //所有网络适配器 pcap_if_t *d; //选中的网络适配器 char errbuf[PCAP_ERRBUF_SIZE]; //错误缓冲区,大小为256 int i = 0; //适配器计数变量 /** int pcap_findalldevs_ex ( char * source, struct pcap_rmtauth * auth, pcap_if_t ** alldevs, char * errbuf ); PCAP_SRC_IF_STRING代表用户想从一个本地文件开始捕获内容; */ //获取本地适配器列表 if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf) == -1){ //结果为-1代表出现获取适配器列表失败 fprintf(stderr,"Error in pcap_findalldevs_ex:\n",errbuf); //exit(0)代表正常退出,exit(other)为非正常退出,这个值会传给操作系统 exit(1); } //打印设备列表信息 /** d = alldevs 代表赋值第一个设备,d = d->next代表切换到下一个设备 结构体 pcap_if_t: pcap_if * next 指向下一个pcap_if,pcap_if_t和pcap_if 结构是一样的 char * name 代表适配器的名字 char * description 对适配器的描述 pcap_addr * addresses 适配器存储的地址 u_int flags 适配器接口标识符,值为PCAP_IF_LOOPBACK */ for(d = alldevs;d !=NULL;d = d->next){ printf("number:%d name:%s",++i,d->name); if(d->description){ //打印适配器的描述信息 printf("description:%s\n",d->description); }else{ //适配器不存在描述信息 printf("description:%s","no description\n"); } printf("flags:%s\n",d->flags); } //i为0代表上述循环未进入,即没有找到适配器,可能的原因为Winpcap没有安装导致未扫描到 if(i == 0){ printf("interface not found,please check winpcap installation"); } //释放网络适配器列表 pcap_freealldevs(alldevs); return 0; }
由于各个编译器不一,或者Winpcap的版本不同,可能报的错误不一。
可能报的错误:则可以添加一个头文件remote-ext.h ,即#include "remote-ext.h"(记住这条语句要放在#include “pcap.h”之后,否则会出错!)
则将#include "remote-ext.h"语句换成#define HAVE_REMOTE即可
运行结果:
1. rpcap://\Device\NPF_{5AC72F8D-019C-4003-B51B-7ABB67AF392A} (Network adapter 'Microsoft' on local host) 2. rpcap://\Device\NPF_{C17EB3F6-1E86-40E5-8790-AC2518B74D05} (Network adapter 'Microsoft' on local host) 3. rpcap://\Device\NPF_{33E23A2F-F791-409B-8452-A3FB5A78B73E} (Network adapter 'Qualcomm Atheros Ar81xx series PCI-E Ethernet Controller' on local host) 4. rpcap://\Device\NPF_{DCCF036F-A9A8-4225-B980-D3A3F0575F5B} (Network adapter 'Microsoft' on local host) 5. rpcap://\Device\NPF_{D62A0060-F424-46FC-83A5-3394081685FD} (Network adapter 'Microsoft' on local host) 6. rpcap://\Device\NPF_{B5224A53-8450-4537-AB3B-9869158121CD} (Network adapter 'Microsoft' on local host)