PcapPlusPlus使用记录(一、环境搭建&简单使用)

您所在的位置:网站首页 npcap使用 PcapPlusPlus使用记录(一、环境搭建&简单使用)

PcapPlusPlus使用记录(一、环境搭建&简单使用)

2024-05-06 13:05| 来源: 网络整理| 查看: 265

简介

由于项目的需要,近期产生了一个需求:将一个 pacp 文件解析出来,然后尝试提取每个连接的各种统计数据,例如提取一个完整的TCP会话中的源IP、目的IP、源端口、目的端口、会话开始时间、会话结束时间、发送的数据包数量、发送的数据包总大小等等。

能够实现这一需求的库有很多,如python中的 scapy 、 dpkt ,C++中的 PcapPlusPlus 等,考虑到将来可能需要处理较大的 pcap 文件,以及C++相比于python在执行速度上的优势,我决定使用C++作为流量处理的语言;简单翻阅了一下 PcapPlusPlus的文档 ,我认为这个库的易用性能够满足我较低的水平,因此决定先实践一下再说。

预装依赖

从这里开始,我想将 PcapPlusPlus 简称为 PCPP ,方便文章的撰写之用 。

本文使用的环境是:Win10 + VisualStudio2019 。

要使用这个库,我们需要先安装一些依赖。

个人建议将这些依赖下载到同一个地方,方便管理!

安装 WinPcap开发者工具 或 Npcap SDK 。下载解压而已,很简单!我这边使用的是WinPcap 。 安装 pthread-win32工具 ,注意这里的链接跟PCPP文档里面的链接是不一样的!文档里面的URL协议是 ftp ,我下载的时候好像打不开的样子,就改为使用 https 了! 可能还需要一个 Microsoft Visual C++ Redistributable 工具,从这里下下来的是个 exe 文件,我在后面的过程中 暂时没有用到 !也就是说我还没运行过这个EXE,先下载下来而已! 下载PcapPlusPlus

直接从 PcapPlusPlus v21.11 页面上把示例代码下载下来!我这边选用的是 windows-vs2019 这个压缩包!

到这一步,算上我们之前下载 并解压 的依赖,文件夹里面应该有这么多东西:

现有的文件

All right?进入刚才下载的VS2019文件夹里面,有个 ExampleProject ,打开之:

ExampleProject文件结构

没问题的话,就准备运行示例程序了!

运行示例程序

熟悉VS的朋友可能要迫不及待地把那个 .sln 文件给打开了~不要心急!

首先我们应该修改 .props 文件,这个文件是用来指定项目里面的一些属性的;具体地说,其实就是指定刚才下载的几个依赖的路径而已!如果不修改这个文件,贸然打开 .sln ,那必然是要报错的!

最原始的 .props 文件内容如下:

Drive:\your\PcapPlusPlus\folder Drive:\WpdPack\folder Drive:\pthread-win32\folder

看到吗?这个文件指定三个关键路径:

PcapPlusPlusHome :就是刚才解压出来的PCPP目录,也就是现在这个 ExampleProject 的上级目录! PcapSdkHome :用于处理 pcap 文件的SDK工具的目录,在 预装依赖 小节里面我们下载了WinPcap,还记得吗?把它的路径写在这里即可!如果你选用的是Npcap,道理也一样~ PThreadWin32Home :多线程库!把pthread路径填进去吧 😀

在我的PC上,修改完成之后这个文件差不多是这样:

E:\PcapPlusPlus\pcapplusplus-21.11-windows-vs2019 E:\PcapPlusPlus\WpdPack E:\PcapPlusPlus\pthreads-w32-2-9-1-release

之后,就可以打开 .sln 文件了!示例项目即刻出现!

main.cpp 简单使用PcapPlusPlus解析了一下示例项目里面的 1_packet.pcap 文件,这个文件只有一个数据包,程序把源IP和目的IP输出了一下而已!

直接编译运行即可:

运行结果

简单使用PCPP处理pcap文件

刚才运行的示例未免太简单,很难体现出咱们这个库的潜力!

在这一小节,我希望使用这个库简单处理一下我之前捕获的一个 pcap 文件,里面包含两万多条数据,其实也还不算很大。

test_file_1.pcap

先把代码贴出来,再慢慢解释吧~

#include #include #include #include #include #include int main(int argc, char* argv[]) { // Part 1 // open a pcap file for reading pcpp::IFileReaderDevice* reader = pcpp::IFileReaderDevice::getReader("test_file_1.pcap"); if (!reader) { std::cerr


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3