WinPcap

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WinPcap相关的知识,希望对你有一定的参考价值。

一、什么是WinPcap

WinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库.

大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets。  这是一种简单的实现方式,因为操作系统已经妥善处理了底层具体实现细节(比如协议处理,封装数据包等等),并且提供了一个与读写文件类似的,令人熟悉的接口。

然而,有些时候,这种“简单的方式”并不能满足任务的需求,因为有些应用程序需要直接访问网络中的数据包。也就是说,那些应用程序需要访问原始数据包,即没有被操作系统利用网络协议处理过的数据包。

WinPcap产生的目的,就是为Win32应用程序提供这种访问方式; WinPcap提供了以下功能

  • 捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的

  • 在数据包发送给某应用程序前,根据用户指定的规则过滤数据包

  • 将原始数据包通过网络发送出去

  • 收集并统计网络流量信息

以上这些功能需要借助安装在Win32内核中的网络设备驱动程序才能实现,再加上几个动态链接库DLL。

二、WinPcap的配置步骤

1、下载Microsoft Visual Studio 2010,打开

技术分享

首界面如下

技术分享

2、将这个文件保存一下路径

技术分享

3、在软件中具体配置如下:

项目-->**属性(alt+F7)

配置属性-->清单工具-->输入和输出-->嵌入清单-->否

项目-->**属性(alt+F7)

配置属性-->C/C++-->常规-->附加包含目录-->


项目-->**属性(alt+F7)

配置属性-->链接器-->常规-->附加库目录-->


项目-->**属性(alt+F7)

配置属性-->链接器-->输入-->附加依赖项-->补充“;Packet.lib;wpcap.lib”


项目-->**属性(alt+F7)

配置属性-->C/C++-->预处理器-->预处理器定义-->补充“;HAVE_REMOTE”

4、配置完之后复制一行代码测试结果,代码如下:

// ListInterface.cpp : 定义控制台应用程序的入口点。

//


#include "stdafx.h"

#include "pcap.h"



int _tmain(int argc, _TCHAR* argv[])

{


    pcap_if_t *alldevs;

    pcap_if_t *d;

    int i=0;

    char errbuf[PCAP_ERRBUF_SIZE];

    

    /* 获取本地机器设备列表 */

    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)

    {

        fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);

        exit(1);

    }

    

    /* 打印列表 */

    for(d= alldevs; d != NULL; d= d->next)

    {

        printf("%d. %s\n", ++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 0;

    }


    /* 不再需要设备列表了,释放它 */

    pcap_freealldevs(alldevs);



}

5、点击调试运行,如出现以下界面:

技术分享

就说明测试成功。

本文出自 “12034923” 博客,转载请与作者联系!

以上是关于WinPcap的主要内容,如果未能解决你的问题,请参考以下文章

捕获网络数据包并进行分析的开源库-WinPcap