VC中建立使用WinPcap的开发环境

winpcap在vc6下配置环境 <br />1.下载winpcap及开发包。winpcap下载地址:http://www.winpcap.org/install/default.htmwinpcap开发包: http://www.winpcap.org/devel.htm<br />2. 安装winpcap<br />3. 解压winpcap开发包,将得到一个WpdPack目录,该目录中包含了5个子目录:docs、Examples-pcap、Examples-remote、Include和Lib。docs中是winpcap的帮助文档,比较 阅读详情

创建一个应用,使用wpcap.dll

用微软Visual C++创建一个应用,使用wpcap.dll,可按照下列步骤:

- 在每个需要使用库导出的函数(functions exported by library)的源文件开始处,包含pcap.h头文件;

- 如果程序用到了WinPcap和Win32平台呢相关的函数,记得在预处理器定义中包含WPCAP;

- 如果程序用到了WinPcap的远程抓取功能,则需要在预处理器定义中加入HAVE_REMOTE,而不要在源文件中直接包含

头文件remote-ext.h;

- 根据你的目标平台(x86 或 x64),将wpcap.lib包含到连接选项中。x86的wpcap.lib可以在WinPcap developer’s pack的/lib目录

下找到,x64的wpcap.lib可以在/lib/x64目录下找到;

 

怎样设定Microsoft Visual Studio

Visual Studio 6

-                要增加一个预处理器定义,你必须从Project菜单中选择Settings,然后选择C/C++标签,在“Preprocessor Definitions”对话框中添加预处理定义;

-       要在Microsoft Visual C++中一个项目添加库,首先从Project菜单中选择Settings,然后选择Link标签,并将新库的名字加入

到“Object/library modules”文本编辑框中;

-            如果要添加Visual C++搜索库的路径,从Tools菜单中选择Options,然后选择Directories标签,并在下面的Directories中增

加相关路径;

 

Visual Studio 2005 (编译x64应用时必须)

-          要增加一个预处理器定义,你必须从Project菜单中选择Properties然后选择左边立标狂中的C/C++,再选择其下的Preprocessor,将定义添加在右边的Preprocessor Definitions文本框中;

-          要给项目增加库,选择Project菜单中的Properties,然后选中左边列表中的Linker,在选中其下的Input,将库的名字加入到右边的Additional Dependecies文本框中;

-          如果要添加Visual Studio搜索库的路径,从Tools菜单中选择Options,在左边的列表框内选中Project and Solutions,再选中其下的VC++ Directories,在右边选的Show directories for 下拉框中选中Library Files,并在其下面的输入框中加入相关路径;

-          如果要添加Visual Studio搜索的include路径,从Tools菜单中选择Options,在左边的列表框内选中Project and Solutions,再选中其下的VC++ Directories,在右边选的Show directories for 下拉框中选中Include Files,并在其下面的输入框中加入相关路径;

 

示例程序

提供一些示例程序来说明WinPcap API的用法。例子的源代码以及编译和运行它们需用到的文件,可以在Develper’s Pack中找到。处于教学(didactic)目的,我们在这里提供了可以浏览的代码:可以点击变量或者函数就会跳转到其对应的说明文档(本译文不提供该功能)。要看完整的示例代码,请看WinPcap教程(1):获取网卡列表。

包转储(Dump)

这个程序根据命令行不同的开关,从一个文件或者网卡读取包。如果没有提供源,程序将显示网卡列表,其中一个可以被选中。一旦抓包开始,程序将打印出时间邮戳,包的原始内容的长度。下面程序可以在Win32平台上编译运行,也可以在Unix上编译运行(提供的makefile)。

/*

 * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)

 * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)

 * All rights reserved.

 *

 * Redistribution and use in source and binary forms, with or without

 * modification, are permitted provided that the following conditions

 * are met:

 *

 * 1. Redistributions of source code must retain the above copyright

 * notice, this list of conditions and the following disclaimer.

 * 2. Redistributions in binary form must reproduce the above copyright

 * notice, this list of conditions and the following disclaimer in the

 * documentation and/or other materials provided with the distribution.

 * 3. Neither the name of the Politecnico di Torino, CACE Technologies 

 * nor the names of its contributors may be used to endorse or promote 

 * products derived from this software without specific prior written 

 * permission.

 *

 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 *

 */

#include <stdlib.h>

#include <stdio.h>

//

// NOTE: remember to include WPCAP and HAVE_REMOTE among your

// preprocessor definitions.

//

#include <pcap.h>

#define LINE_LEN 16

int main(int argc, char **argv)
{   
pcap_if_t *alldevs, *d;
pcap_t *fp;
u_int inum, i=0;
char errbuf[PCAP_ERRBUF_SIZE];
int res;

struct pcap_pkthdr *header;
const u_char *pkt_data;

    printf("pktdump_ex: prints the packets of the network using WinPcap./n");

    printf("   Usage: pktdump_ex [-s source]/n/n"

           "   Examples:/n"

           "      pktdump_ex -s file://c:/temp/file.acp/n"

           "      pktdump_ex -s rpcap:////Device//NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}/n/n");

    if(argc < 3)
    {
        printf("/nNo adapter selected: printing the device list:/n");
        /* The user didn't provide a packet source: Retrieve the local device list */
        if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
        {
            fprintf(stderr,"Error in pcap_findalldevs_ex: %s/n", errbuf);

            return -1;
        }
        

        /* Print the list */
        for(d=alldevs; d; 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)
        {
            fprintf(stderr,"No interfaces found! Exiting./n");
            return -1;
        }

        printf("Enter the interface number (1-%d):",i);
        scanf_s("%d", &inum);
        

        if (inum < 1 || inum > i)
        {
            printf("/nInterface number out of range./n");

            /* Free the device list */
            pcap_freealldevs(alldevs);
            return -1;
        }
        

        /* Jump to the selected adapter */
        for (d=alldevs, i=0; i< inum-1 ;d=d->next, i++);

        /* Open the device */
        if ( (fp= pcap_open(d->name,
                            100 /*snaplen*/,
                            PCAP_OPENFLAG_PROMISCUOUS /*flags*/,
                            20 /*read timeout*/,
                            NULL /* remote authentication */,
                            errbuf)
                            ) == NULL)
        {
            fprintf(stderr,"/nError opening adapter/n");

            return -1;
        }
    }
    else 
    {
        // Do not check for the switch type ('-s')
        if ( (fp= pcap_open(argv[2],
                            100 /*snaplen*/,
                            PCAP_OPENFLAG_PROMISCUOUS /*flags*/,
                            20 /*read timeout*/,
                            NULL /* remote authentication */,
                            errbuf)
                            ) == NULL)
        {
            fprintf(stderr,"/nError opening source: %s/n", errbuf);

            return -1;
        }
    }

    /* Read the packets */
    while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0)
    {

        if(res == 0)
            /* Timeout elapsed */
            continue;

        /* print pkt timestamp and pkt len */
        printf("%ld:%ld (%ld)/n", header->ts.tv_sec, header->ts.tv_usec, header->len);          

        /* Print the packet */
        for (i=1; (i < header->caplen + 1 ) ; i++)
        {
            printf("%.2x ", pkt_data[i-1]);
            if ( (i % LINE_LEN) == 0) printf("/n");
        }

        printf("/n/n");     
    }

    if(res == -1)
    {
        fprintf(stderr, "Error reading the packets: %s/n", pcap_geterr(fp));

        return -1;
    }

    return 0;

}

 

包过滤

这是一个更加复杂的libpcap示例,展示了如何创建和设置过滤器、如何将抓到内容的存入硬盘以及其他一些功能。该程序可以在Win32和Unix编译(分别提供了project和makefile)。Pcap_filter (pf.exe)是一个通用的包过滤应用:其输入参数是包源(可以是网卡或者文件),一个过滤器和一个输出文件。它将从源获取包,知道按下Ctrl+C或者整个文件已经被处理完毕,用过滤器处理输入的包,并将满足filter规则的包存入输出文件。Pcap_filter不仅可以根据特定的过滤器转储网络数据,也可以从先前保存的文件获取包。输入和输出文件的格式都是libpcap用的格式,也就是说和WinDump,tcpdump以及许多其他网络工具使用的格式是一样的。

/*

 * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)

 * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)

 * All rights reserved.

 *

 * Redistribution and use in source and binary forms, with or without

 * modification, are permitted provided that the following conditions

 * are met:

 *

 * 1. Redistributions of source code must retain the above copyright

 * notice, this list of conditions and the following disclaimer.

 * 2. Redistributions in binary form must reproduce the above copyright

 * notice, this list of conditions and the following disclaimer in the

 * documentation and/or other materials provided with the distribution.

 * 3. Neither the name of the Politecnico di Torino, CACE Technologies 

 * nor the names of its contributors may be used to endorse or promote 

 * products derived from this software without specific prior written 

 * permission.

 *

 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 *

 */

#include <stdlib.h>

#include <stdio.h>

#include <pcap.h>

#define MAX_PRINT 80

#define MAX_LINE 16

void usage();

void main(int argc, char **argv)
{
pcap_t *fp;
char errbuf[PCAP_ERRBUF_SIZE];
char *source=NULL;
char *ofilename=NULL;
char *filter=NULL;
int i;
pcap_dumper_t *dumpfile;
struct bpf_program fcode;
bpf_u_int32 NetMask;
int res;
struct pcap_pkthdr *header;
const u_char *pkt_data;

    if (argc == 1)
    {
        usage();
        return;
    }

    for(i=1;i < argc; i+= 2)
    {
        switch (argv[i] [1])
        {
            case 's':
            {
                source=argv[i+1];
            };
            break;
            case 'o':
            {
                ofilename=argv[i+1];
            };
            break;
            case 'f':
            {
                filter=argv[i+1];
            };

            break;
        }
    }

    // open a capture from the network
    if (source != NULL)
    {
        if ( (fp= pcap_open(source,
                            1514 /*snaplen*/,
                            PCAP_OPENFLAG_PROMISCUOUS /*flags*/,
                            20 /*read timeout*/,
                            NULL /* remote authentication */,
                            errbuf)
                            ) == NULL)
        {
            fprintf(stderr,"/nUnable to open the adapter./n");
            return;
        }
    }
    else usage();

    if (filter != NULL)
    {
        // We should loop through the adapters returned by the pcap_findalldevs_ex()
        // in order to locate the correct one.
        //
        // Let's do things simpler: we suppose to be in a C class network ;-)
        NetMask=0xffffff;

        //compile the filter
        if(pcap_compile(fp, &fcode, filter, 1, NetMask) < 0)
        {
            fprintf(stderr,"/nError compiling filter: wrong syntax./n");
            return;
        }

        //set the filter
        if(pcap_setfilter(fp, &fcode)<0)
        {
            fprintf(stderr,"/nError setting the filter/n");
            return;
        }
    }

    //open the dump file
    if (ofilename != NULL)
    {
        dumpfile= pcap_dump_open(fp, ofilename);

        if (dumpfile == NULL)
        {
            fprintf(stderr,"/nError opening output file/n");
            return;
        }
    }
    else usage();

    //start the capture
    while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0)
    {
        if(res == 0)
        /* Timeout elapsed */
        continue;

        //save the packet on the dump file
        pcap_dump((unsigned char *) dumpfile, header, pkt_data);
    }
}


void usage()
{
    printf("/npf - Generic Packet Filter./n");

    printf("/nUsage:/npf -s source -o output_file_name [-f filter_string]/n/n");

    exit(0);
}

 

搭建WinPcap开发环境 本文参考了以下文档:http://www.winpcap.org/docs/docs_411/html/group__wpcapsamps.html一、软件准备1)         下载最新版本的WinPcap安装包。地址:http://www.winpcap.org/install/default.htm2)         下载最新版本的WinPcap开发包。地址:http://www.winpcap.org/devel.htm3)         安装WinPcap。双击步骤1)下载的WinPcap_ 阅读详情

相关推荐

VC6.0设置winpcap

winpcap提供两个不同级别的编程接口:一个基于libpcap的wpcap.dll,另一个是较为底层的packet.dll,对于一般的要与Unix平台的Libpcap兼容的开发者来说,使用wpcap.dll是当然的选择。 初次编译时会遇到问题:“无法打开pcap.h”。解决方法: 1.安装winpcap驱动。 2.打开VC,工具-》选项-》目录,将winpcap的include,lib目录

lxhjjz的专栏 5580

从配置Winpcap环境(dev c++)到运行HTTP数据包捕获还原

2.打开Dev c++,工具——》编译选项——》编译器配置——》目录——》库,点击红框处添加Winpcap开发包中的Lib文件夹。链接:https://pan.baidu.com/s/155x_BiCf-O0gNLk29_nTWw?4.新建一个空项目,点击“项目”——》"项目属性",依照下图添加wpcap.lib和WS2_32.lib。3.继续向"C包含文件"和"C++包含文件"中添加开发者包中的Include文件夹。我的环境:WindosXP虚拟机 , Dev C++

lsm1227msl的博客 1653

使用Winpcap示例程序的时候,会出现很多错误。

WINPCAP编程环境设置2008-05-19 12:41一、WINPCAP编程环境设置在正式WinPcap编程之前,要配置运行环境。1、运行环境设置Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:wpcap.dll Packet.dll WanPacket.dll pthreadVC.dll这四个动态链接库在WinPcap驱动程序里。如果没有这

Meinherz的专栏 5088

C++ winpcap网络抓包代码实现,以及抓包内容解析。

C++ winpcap网络抓包代码实现,以及抓包内容解析。 c++实现抓包代码 1.安装winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程。Winpcap提供了一个强大的编程接口,它很容易地在各个操作系统之间进行移植。 百度网盘: 链接:https://pan.baidu.com/s/1ot7H3Vz_KBvdmYKjJqu

qq_34481573的博客 1万+

windows下使用WinPcap获取网卡列表

虽然看了挺多资料,不过实际做起来还是比较麻烦,这里总结下,一下在VC6.0运行通过 1.去网上下载winPcap安装包和开发人员包:http://www.winpcap.org/   在WpdPack里面有依赖包和开发示例,大家自己看 2.我们创建一个win32 console application就行,然后创建一个主函数的文件 3.我们的程序需要到WpdPack里面的包,所以我们需要

mzlqh的专栏 7739

VC6到VS2022:WinPcap开发环境配置全版本避坑指南(含WpdPack库下载)

本文详细介绍了从VC6到VS2022全版本Visual Studio中配置WinPcap开发环境的完整指南,包括WpdPack库下载和避坑技巧。针对不同版本的IDE,提供了具体的环境配置方案和常见问题解决方案,帮助开发者高效进行网络编程开发。

weixin_30613343的博客 346

c++环境下qt+pcpp(winpcap)实现的网络抓包(sniff)程序

本软件是利用c++语言基于Qt与PcapPlusPlus(以下简称PcPP)库在vs2019中开发的一个单一的windows应用。Qt是一个良好的跨平台界面设计库,简单易用,可移植性好;PcapPcapPlus是一个多平台的c++库,用于捕获、解析和制作网络数据包,功能强大,易于使用,简洁高效。本程序使用在开发过程中,利用异步抓包的方式,将ui线程作为主线程,抓包及数据处理线程作为子线程,保证用户体验的一个连贯性,同时,保证抓包的效率。软件的基本运行如下图所示:在运行本程序前,需要安装WinPcap 。在安

qq490765184的博客 9475

VC++开发winpcap封包捕获程序的准备工作

VC++开发winpcap封包捕获程序的准备工作;

bcbobo21cn的专栏 545

如何在VC中配置winPcap开发环境

<br />VC6.0中使用winpcap1.下载winpcap的安装包,程序员开发包。(两个包)2.执行安装包,这样你的机子就能运行winpcap程序了3.解压开发包,在VC的option的include和lib中加入winpcap的include和lib4. 在工程的setting中导入wpcap.lib和Packet.lib库VC .net中使用winpcap1、在项目-〉属性    -〉C++    -〉常规标签的附加包含目录中包含WinPcap的Include目录  2、在项目-〉属性    -〉

6694

利用winpcap与C++实现网络数据采集器设计

本文还有配套的精品资源,点击获取 简介:本项目深入探讨利用winpcap库和C++编程语言实现网络数据捕获与分析的毕业设计。winpcap库是一个强大的网络数据包捕获和监控工具,广泛应用于网络安全和性能监控等领域。项目的核心目标是创建一个能够捕获并解析网络数据包的工具,通过配置winpcap环境,调用API函数进行数据包捕获,并利用BPF语法进行数据包过滤,最后解析数据包中...

weixin_42452483的博客 1644

GAN实战:用Python和TensorFlow打造你的第一个生成对抗网络(附完整代码)

本文是一份详细的GAN实战指南,指导读者使用Python和TensorFlow框架从零开始构建并训练一个生成对抗网络。文章涵盖了环境搭建、MNIST数据预处理、生成器与判别器模型构建、对抗性损失函数定义、训练循环编写以及关键的调试技巧,旨在帮助开发者通过动手实践深入理解GAN的核心原理与实现过程。

php55的博客 480

winpcap编程环境搭建:VC6.0 and VS2008

VC6.0下winpcap编程环境搭建:1. 到http://www.winpcap.org/devel.htm 下载WinPcap的安装包(WinPcap.exe)和 WinPcap的Developer's Pack(WpdPack.zip)。   PS:如果你的VC6.0的SDK不是最新的,       请下载4.0.1版本的WinPcap的安装包和Developer's Pack(经测试,该版本在“旧”的VC6.0中可用),       因为太高版本的会编译不过。   PPS:当然,你也可以先更新你的

Y's Blog 3181

Switch游戏安装新思路:抛弃Commander One,试试这款免费的Mac神器OpenMTP

本文介绍了Mac用户安装Switch游戏的新选择——免费工具OpenMTP,对比收费软件Commander One,OpenMTP在MTP连接稳定性和文件管理上更具优势。详细解析了OpenMTP的安装配置、核心功能及实战操作,帮助用户高效完成游戏安装,特别适合已破解并安装DBI的Switch用户。

weixin_30664051的博客 586

winpcap

1. winpcap 1. winpcap简介 (windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程。 https://baike.baidu.com/item/winpcap/11048966?fr=aladdin 2. win...

BooleanWater的博客 2125

ENVI5.6 自动化流程:GF系列卫星影像批处理与质量优化

本文详细介绍了如何利用ENVI5.6构建针对GF-2、GF-6、GF-7系列卫星影像的自动化批处理流水线。通过配置Batch Processing工具,实现从正射校正到图像融合的全流程批量处理,并分享参数设置、质量监控与故障排查的实战经验,旨在显著提升海量遥感影像的处理效率与成果质量。

efc1234567的博客 604

Aurora 8B/10B IP核介绍 —— Xilinx 技术文档Pg046

一、概述该IP核与用户接口之间支持AXI4-Stream协议,且基于ZYNQ SOC、A7、K7、V7以及UltraScale、UltraScale+系列FPGA的高速收发器(the high-speed serial transceivers)进行实现。多达 16 个连续绑定4 个连续绑定的 GTP 收发器framingstreaming以及全双工或单工加扰消扰CRC校验热插拔Aurora 8B/10B核心(图1-1)是一种可扩展的、轻量级的、用于高速串行通信的链路层协议;

qq_32147275的博客 1640

winpcap安装使用教程

1、安装winpcap 地址:http://www.winpcap.org/install/default.htm =》安装软件 地址:http://www.winpcap.org/archive =》下载package开发包wpdPack a) 执行安装包,这样你的机子就能运行winpcap程序了 b)解压开发包,在VC6.0的Tools-->Option-->Directories的I

qq_29350467的博客 5万+

别再让会议变‘回音壁’:手把手教你调优WebRTC的AEC3回声消除(附实战代码)

本文深入解析WebRTC的AEC3回声消除技术,提供从参数调优到声学环境适配的实战指南。通过诊断回声特征、解剖核心参数(如filter.length_blocks和delay_estimate_smoothing)以及应对特殊场景(如密闭空间与开放办公区),帮助开发者有效解决视频会议中的回声问题,提升语音通信质量。附有实战代码和调试工具,适合需要优化实时通信体验的开发者。

weixin_29220405的博客 173
上一篇: vc中调用Com组件的方法
下一篇: Android获取SD卡视频音频文件
一码农
博客等级 码龄14年 2粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值