codeblocks配置winpcap开发环境

转载请注明出处,谢谢_ (:з」∠)_

起因
最近作业要用Winpcap开发包分析.pcap文件实现报文字段的识别…本来打算用Visual Studio写,不过想起以前打OJ的时候都用Code::Blocks写C语言的代码…在好奇心的驱使下研究了一下…还踩了个坑_(:з」∠)_

1.下载Winpcap安装包与开发库

(1)资源链接:winpcap安装包winpcap开发库
codeblocks配置winpcap开发环境codeblocks配置winpcap开发环境
(2)如果已经安装过 Wireshark (一般在wireshake安装的时候会在安装途中跳出winpcap的安装程序)且确认安装了Winpcap环境,可以暂时不用重新安装Winpcap安装包。但可能会出现(3)中的情况

(3)在配完环境运行demo程序时,发现demo程序运行错误 —— 无法正确输出结果且return -12。原因为:wireshark[Version 3.0.0 (v3.0.0-0-g937e33de)]默认安装的winpcap存在问题;重新安装winpcap安装包即可

2.配置winpcap开发环境

2.0 环境介绍

  • Code::Blcok 13.12
  • winpcap Developer Pack 4.1.2(WpdPack_4_1_2,推荐解压到纯英文路径)
  • winpcap 4.1.3

2.1 配置编译环境

  1. 打开Codeblock,选择【Settings】->【Complier】

  2. 在【Compilersettings】->【#defines】下输入

    WPCAP
    HAVE_REMOTE
    

    其中,WPCAP为使用Winpcap win32下特有的的函数所需要的宏定义,HAVE_REMOTE为使用远程捕获功能所需要的宏定义,等价于在编码时定义

    #define WPCAP
    #define HAVE_REMOTE
    

    codeblocks配置winpcap开发环境

  3. 在【Linker settings】中添加Winpcap开发库中Packet.lib与wpcap.lib的位置及WS2_32.dll的位置

  • 对于Packet.lib与wpcap.lib,可根据系统架构选择32位(位于WpdPack\Lib)或64位(位于WpdPack\Lib\x64)的函数库文件
  • 对于WS2_32.dll,64位的windows系统一般位于C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib路径下,32位的windows系统一般位于C:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib路径下
  • 利用下方【Add】添加绝对路径
    codeblocks配置winpcap开发环境
  1. 在【Search directories】添加开发包的头文件位置WpdPack\Include,同样为利用【Add】添加绝对路径
    codeblocks配置winpcap开发环境

3.测试程序

可新建文件或者工程,将下方代码拷入进行测试demo.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pcap/pcap.h>

/* pcap_if_t 数据结构
struct pcap_if_t{
    pcap_if_t *next;
    char *name;
    char *description;
    pcap_addr *addresses;
    u_int falgs;
}
*/
int demo()
{

    printf("Get the device list\n");
    pcap_if_t *alldevs;//记录所有设备信息
    pcap_if_t *d;//遍历的指针

    int i=0;
    char errbuf[PCAP_ERRBUF_SIZE];

    /* 获取本地机器设备列表 */
    if (pcap_findalldevs(&alldevs, errbuf) == -1)//pcap_findalldevs -- 返回网卡列表,alldevs指向表头
    {
        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("\no interfaces found! make sure winpcap is installed.\n");
        return 0;
    }
    /* 不再需要设备列表了,释放它 */
    pcap_freealldevs(alldevs);
    return 0;
}

之后会上传demo.c的测试工程,方便大家进行测试,同时也包含部分推荐资料与示例代码

4. 学习与使用


若仍存在问题,可在下方留言_(:з」∠)_

如果您觉得阅读后有启发,可否点个 赞 呢~Thanks♪(・ω・)ノ

参考

https://blog.****.net/baikaishui525/article/details/7421074
【其他的找不到了…不好意思…】