WinPcap教程(一) 获取本地驱动设备列表

第一节:获取驱动列表

在这一节中讲述了,如何给予WinPcap获取网络适配器列表。主要通过函数pcap_findalldevs_ex(),它返回一个pcap_if结构的链表,每一个pcap_if结构保存一个适配器的信息,遍历输出所有的适配器信息后,要记得调用pcap_freealldevs()函数释放。

首先看一下pcap_findalldevs_ex()函数原型: 

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

 

该函数是pcap_findalldevs()的扩展形式,它只列出本地机器的驱动设备。

 1 参数说明:
 2 
 3 Char * source ;  适配器文件所在位置,取值有:
 4 
 5 (1), 'rpcap://'   表示本地的适配器,此时可以用宏定义PCAP_SRC_IF_STRING。
 6 
 7 (2), ’rpcap://hostname:prot’  表示主机名称为hostname并且端口号为port,如本地的hostname为”localhost”,端口号一般为”80”.
 8 
 9 (3),  'file://c:/myfolder/', 指定路径。
10 
11    Struct  pcap_rmtauth * auth; 指向pcap_rmtauth结构体,当连接到远程host时,需要它保存一些信息。对于本地连接时没有意义,一般去NULL。
12 
13 Pcap_if_t ** alldevs; 利用结构体pcap_if存储适配器信息,并保存在链表结构的alldevs中。
14 
15 Char * errbuf; 保存错误信息。
16 
17 返回为0成功,否则返回-1,失败信息保存在errbuf中。

 

Pcap_if结构:                  

 1 变量说明:
 2 
 3    Struct  pcap_if * next; 指向下一个结构体。
 4 
 5     Char * name; 指向该适配器名称。
 6 
 7     Char * description; 适配器描述内容。
 8 
 9     Struct pcap_addr * address;
10 
11       U_int flags;

 

/*********************************************
* 代码贡献:
* 注意事项:
    1,第一行加上“#define HAVE_REMOTE”,这样就不要加上头文件 remote-ext.h,也就是说两者效果一样,但推荐前者。
2,很多教程中都只是添加头文件”pcap.h” 会提示相关函数无法解析,需要添加依赖库wpcap.lib
3,代码最后记得pcap_freealldevs()。
*********************************************/
#define HAVE_REMOTE
#include "pcap.h"
#pragma comment(lib,"wpcap.lib")
int main()
{
    pcap_if_t *alldevs;
    pcap_if_t *d;
    int i = 0;
    char errbuf[PCAP_ERRBUF_SIZE];

    /*    get local devices     */
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf) == -1)
    {
        fprintf(stderr,"Error in pcap_findalldevs_ex:%s\n",errbuf);
        exit(1);
    }

    /* print devices list */
    for (d = alldevs;d != NULL; d = d->next )
    {
        printf("%d. %s",++i,d->name);
        if (d->description)
            printf("(%s)\n",d->description);
        else
            printf("(No description avaliable)\n");
    }

    if (i == 0)
    {
        printf("\nNo interfaces found! Make sure Winpcap is installed.\n");
        return -1;
    }

    pcap_freealldevs(alldevs);

    system("pause");
    return 0;
}


OK,Enjoy!

 

转载于:https://www.cnblogs.com/lianfei/archive/2012/11/17/wpcap_1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
什么是WinPcap WinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库. 大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets。 这是一种简单的实现方式,因为操作系统已经妥善处理了底层具体实现细节(比如协议处理,封装数据包等等),并且提供了一个与读写文件类似的,令人熟悉的接口。 然而,有些时候,这种“简单的方式”并不能满足任务的需求,因为有些应用程序需要直接访问网络中的数据包。也就是说,那些应用程序需要访问原始数据包,即没有被操作系统利用网络协议处理过的数据包。 WinPcap产生的目的,就是为Win32应用程序提供这种访问方式; WinPcap提供了以下功能 捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的 在数据包发送给某应用程序前,根据用户指定的规则过滤数据包 将原始数据包通过网络发送出去 收集并统计网络流量信息 以上这些功能需要借助安装在Win32内核中的网络设备驱动程序才能实现,再加上几个动态链接库DLL。 所有这些功能都能通过一个强大的编程接口来表现出来,易于开发,并能在不同的操作系统上使用。这本手册的主要目标是在一些程序范例的帮助下,叙述这些编程接口的使用。 如果您现在就想开始摸索这些功能,您可以直接进入 WinPcap用户手册. 哪些程序在使用WinPcap WinPcap可以被用来制作许多类型的网络工具,比如具有分析,解决纷争,安全和监视功能的工具。特别地,一些基于WinPcap的典型应用有: 网络与协议分析器 (network and protocol analyzers) 网络监视器 (network monitors) 网络流量记录器 (traffic loggers) 网络流量发生器 (traffic generators) 用户级网桥及路由 (user-level bridges and routers) 网络入侵检测系统 (network intrusion detection systems (NIDS)) 网络扫描器 (network scanners) 安全工具 (security tools) 什么是WinPcap做不到的 WinPcap能 独立地 通过主机协议发送和接受数据,如同TCP-IP。这就意味着WinPcap不能阻止、过滤或操纵同一机器上的其他应用程序的通讯:它仅仅能简单地"监视"在网络上传输的数据包。所以,它不能提供类似网络流量控制、服务质量调度和个人防火墙之类的支持

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值