当前位置:首页 > Windows程序 > 正文

WinPcap编程(一)

2021-03-27 Windows程序

按着文档顺序写的。

开发环境:win10+VS2013。

配置WinPcap环境就不多说。直接给网址:

内容大多是函数解释+碰到的问题的解决方案。学习&&警示。

1.获取适配器列表

  获取适配器的目的是:获取本机有哪些适配器,便于之后选择用哪个适配器抓包。

  首先,先了解一个数据类型pcap_if/pcap_if_t,这是一个链表结构,用来存储本机的所有适配器。

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

View Code

备注:

  第一是一个pcap_if的链表指向下一个设备接口;

  第二个是设备的实际的名字,这个名字是机器能识别的名字,供pcap_open_live()调用;

  第三个是设备的文本描述符,这个描述符就是人们能够识别的文本符号;有可能为null

  第四个是一个地址指针,指向的是一系列接口(pcap_addr)的第一个指针;

  第五个是一个标志位,目前这个标志位主要是不是loopback设备。

  

  然后,获取适配器列表的函数是:

int pcap_findalldevs_ex ( char * source ; struct pcap_rmauth * auth; pcap_if_t ** alldevs; char * errbuf; )

View Code

备注:

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

2.auth是远程登录信息(pcap_rmauth),有用户名、密码、类型。用户名和密码都是字符指针,类型有:RPCAP_RMTAUTH_NULL  RPCAP_RMTAUTH_PWD。多为BULL。

3.alldevs用于存储返回的接口信息。我们要事先定义pcap_if_t *alldevs,这是一个链表,存储接口信息。

4.errbuf出错信息。

  5.返回值为0则顺利;-1代表出现错误。

  最后,释放设备函数:

void pcap_freealldevs (pcap_if_t *alldevsp)

View Code

  释放内存。

  原装代码:

#define WIN32 #include "pcap.h" void main() { pcap_if_t *alldevs, *d; int i = 0; char errbuf[PCAP_ERRBUF_SIZE]; /* PCAP_ERRBUF_SIZE =256在pcap.h中定义*/ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) /* 这个API用来获得网卡的列表 */ { fprintf(stderr, "Error in pcap_findalldevs: %s\n", errbuf); //errbuf参数 当有异常情况发生时,这个参数会被PCAP填充为某3个特定的错误字串 return; } /* 显示列表的响应字段的内容*/ for (d = alldevs; d; d = d->next) { printf("%d. %s,%s\n", ++i, d->name,d->addresses); if (d->description) { printf(" (%s)\n", d->description); //system("pause"); } else printf(" (No description available)\n"); } if (i == 0) { printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return; } /*We don‘t need any more the device list. Free it */ pcap_freealldevs(alldevs); system("pause"); }

View Code

WinPcap编程(一)

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68443.html