(一)循序渐进学习使用 WINPCAP
这一部分展示了如何使用 WINPCAP-API 的不同的功能,它作为一个使用指南被划分为一系
列的课时来带领读者循序渐进的体会 PCAP 的程序设计的魅力:从简单的基本功能(如获取
网卡的列表,数据包的捕获等)到统计和收集网络流量等高级功能。
在这里将提供一些简单但完整的代码作为参考:所有的这些原代码都有和它相关的详细信息
的连接以便单击这些功能和数据结构时能够即使跳转到相关的文献。
这些例子是用 C 语言写的,所以在学习之前首先要有一定的 C 语言的基础,当然 PCAP 作
为一个网络底层的驱动,要想学好它也必须具备一定的网络方面的知识。
(一)得到网络驱动列表
用 PCAP 写应用程序的第一件事往往就是要获得本地的网卡列表。PCAP 提供了
pcap_findalldevs()这个函数来实现此功能,这个 API 返回一个 pcap_if 结构的链表,表的每
项内容含有全面的网卡信息:字段名字、含有名字的描述、有关驱动器的易读信息。
得到网络驱动列表的程序如下:
#include "pcap.h"
main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int i=0;
char errbuf[PCAP_ERRBUF_SIZE];
/* 这个 API 用来获得网卡 的列表 */
if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}
/* 显示列表的响应字段的内容 */
for(d=alldevs;d;d=d->next)
{
printf("%d. %s", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);
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 */
评论7