网络流量在线分析系统的设计与实现

编译环境:visual studio2019,安装并配置winpcap和pthreads库函数

1 配置环境


1.1 安装vscode


参考微信公众号 软件安装管家。

1.2 安装MinGW-w64


下载地址:添加链接描述

安装参考博客:MinGW-w64安装配置全过程

第一步:安装
在这里插入图片描述
在这里插入图片描述
第二步:配置环境变量

在这里插入图片描述
输入命令gcc -v可以查看版本信息,如下图,
在这里插入图片描述

1.3 下载WinPcap


下载地址:添加链接描述

下载解压后的目录:

在这里插入图片描述

1.4 Winpcap环境配置


此配置方法针对 2019 Visual Studio。

以获取已连接的网络适配器列表为例,编写一个简单的Winpcap程序。

第一步:点击项目“属性”

第二步:包含目录 和 库目录 分别加入winpcap的include 和 lib/x64目录

winpcap的头文件路径:WpdPack\Include

winpcap的库文件路径:WpdPack\Lib\目录下:wpcap.lib, Packet.lib;如果是开发64位程序,则使用x64包中的相应库

在这里插入图片描述
第三步:附加依赖项中分别加入如下三个库文件

ws2_32.lib
wpcap.lib
Packet.lib

在这里插入图片描述
第四步:编写获取网络适配器列表的代码main.cpp

在这里插入图片描述

参考代码:参考代码

大致过程:

  • 首先通过pcap_findalldevs_ex获取网络适配器列表

  • 网络适配器列表信息保持在一个pcap_if_t指针中,它是一个经典的C式链表结构,可以通过这个指针遍历所有的网络适配器

  • 最后,调用pcap_freealldevs释放资源

运行结果:

在这里插入图片描述【补充:网络适配器】

网络适配器就是网卡,在“设备管理器”中可以查看本机电脑的网络适配器列表,如下图,

在这里插入图片描述

1.5 pthreads环境配置


下载地址:pthreads-w32-2-9-1

配置过程:

  • 下载pthreads-w32-2-9-1-release.zip文件,解压生成三个文件夹 Pre-built.2、pthreads.2、QueueUserAPCEx

  • 项目属性 — vc++目录 — 包含目录 — 添加 xxx\pthreads-w32-2-9-1-release\Pre-built.2\include

  • 项目属性 — vc++目录 — 库目录 — 添加xxx\pthreads-w32-2-9-1-release\Pre-built.2\lib\x64

  • 项目属性 — 链接器 — 输入 — 附加依赖项 — 添加pthreadVC2.lib

如果代码运行报错:找不到pthreadVC2.dll。解决方法:将pthreadVC2.dll拷贝到项目的源文件夹下,如

在这里插入图片描述

包含头文件pthread.h后,运行可能会提示错误 “1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 ” ,则需要在代码中加入#pragma comment(lib, "pthreadVC2.lib")

遇到错误“int pcap_findalldevs_ex(char *,pcap_rmtauth *,pcap_if_t **,char *)”: 无法将参数 1 从“const char [9]”转换为“char *”,依次点击项目->属性->C/C+±>语言->符合模式,将原来的“是”改为“否”即可。

参考博客:vs2019 c语言配置pthreads多线程

2 实验步骤


实验内容:

设计并实现一个网络流量的分析系统。该系统具有以下功能:

1、实时抓取指定时间间隔中的网络数据。

2、网络协议分析与显示,确认网络协议类型,抓取数据流量大小、方向。

3、将网络数据包聚合成数据流,将源IP、目的IP、源端口、目的端口及协议 等流量数据存储。

4、计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。在这些统计数据的基础上分析不同网络应用的流量特征。

系统流程图:

在这里插入图片描述

项目目录结构:

在这里插入图片描述

3 运行结果


  • result.data文件内容:
    在这里插入图片描述

  • vscode运行结果:
    在这里插入图片描述
    在这里插入图片描述

  • 将traffic.data文件修改后缀名为traffic.pcap,并用wireshark打开,对比vscode流量分析截图,可看出两者捕获内容是一致的,如下图:
    在这里插入图片描述

参考博客:讲解源码

猜你喜欢

转载自blog.csdn.net/weixin_43973415/article/details/111662972