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

article/2025/9/21 4:39:00

编译环境: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流量分析截图,可看出两者捕获内容是一致的,如下图:
    在这里插入图片描述

参考博客:讲解、源码


http://chatgpt.dhexx.cn/article/xv3TPuBJ.shtml

相关文章

时间范围查询

开发工具与关键技术: VS,条件查询 作者:卢惠圳 撰写时间:2019年8月16日 在页面的表格数据中会有要根据时间来作为查询条件的数据,一般是根据时间范围来进行查询所以这里也是时间范围的查询,先将表格和进行时间范围查询…

oracle语句查询时间范围

oracle语句查询时间范围 参考网址 : https://blog.csdn.net/weixin_36436373/article/details/116541220?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167930069316800188562500%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%25…

VUE时间范围选择的组件

最近手写了一个框选时间的组件,可以按半个小时为单位选择时间 代码部分 <template><div><div class"byted-schedule"><table :key"itemKey" class"byted-schedule-calendar-table"><thead><tr><th rows…

Mysql获取指定时间范围数据

MySQL获取某个时间范围内的数据 TO_DAYS(date)函数。 to_days()&#xff1a;返回从0000年至当前日期的总天数。 目录 1、今天(TO_DAYS()) 2、今天昨天(TO_DAYS()) 3.近7天(DATE_SUB()) 5.本月(DATE_FORMAT()) 6.上一月(PERIOD_DIFF()) 7.本季度 8.上季度 9.本年 ​1…

Mybatis-Plus时间范围查询

方式一 通过apply方法&#xff0c;来实现时间范围查询&#xff0c;该方法可用于数据库函数&#xff0c;动态入参的params对应前面applySql内部的{index}部分&#xff0c;这样是不会有sql注入风险的&#xff0c;反之会有! apply(String applySql, Object... params) apply(boo…

elementui DateTimePicker组件 限制时间范围(包含时分秒)

1、基础范围控制&#xff08;只控制日期&#xff0c;不含时分秒&#xff09; <template><el-date-pickertype"datetime"v-model"startDate"value-format"yyyy-MM-dd HH:mm:ss"placeholder"选择开始时间"size"mini"…

MongoDB查询某个时间范围

MongoDB 时间范围查询目前有两种方式&#xff1a; DateISODate MongoDB条件对应关系 (>) 大于 - $gt(<) 小于 - $lt(>) 大于等于 - $gte(< ) 小于等于 - $lte Date方式 例如查询时间段为2023.01.03<日期<2023.01.05可翻译为&#xff1a; "日期字段名&…

移动端时间范围选择

div模块 <div className"choseDate"><div className"range"><input classNamestartTime onClick{()>{this.setState({startVisible:true})}} placeholder"请选择开始日期" value{this.state.startTime} /><DatePickert…

sql查询时间范围数据

mapper.xml >查询一定时间范围 条件:年月日 时分秒 <if test"creatAt ! null and creatAt ! "><![CDATA[and DATE_FORMAT(ride_order.created_at, %Y-%m-%d %h-%m-%s)> DATE_FORMAT(#{creatAt}, %Y-%m-%d %h-%m-%s) ]]></if><if test&qu…

JAVA判断当前时间在时间范围内

我们在日常开发的时候肯定有围绕时间选择的一些功能, 今天给大家分享一个java如何判断当前时间是否在所选择时间范围内的一个小demo public static void main(String[] args) throws ParseException {SimpleDateFormat ft new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss&q…

JavaScript 时间范围

当前时间往前的时间范围&#xff08;六个月之前&#xff09; 效果图 js文件代码片 /*查询日期区间&#xff08;当前时间往前&#xff09; Add By Vivian 2020/12/04 */ //rangeVal:两个日期的间隔符 num&#xff1a;隔多少 timeType&#xff1a;相隔时间类型 function funGet…

JavaScript如何判定一个给定的时间区间在哪些时间段范围内?

作者 | 十方 来源 | https://segmentfault.com/a/1190000041958661 有这样的一个场景&#xff1a;给定一个时间区间&#xff0c;需要判定这个时间区间在哪些时间段范围内. 比如时间段范围如下&#xff1a; [["00:00","01:00"],["01:00","02…

Impala-shell命令参数

文章目录 1. impala-shell外部命令2. impala-shell内部命令 1. impala-shell外部命令 所谓的外部命令指的是不需要进入到impala-shell交互命令行当中即可执行的命令参数。impala-shell后面执行的时候可以带很多参数。你可以在启动 impala-shell 时设置&#xff0c;用于修改命令…

Impala和Hive的关系(详解)

Impala和Hive的关系 Impala是基于Hive的大数据实时分析查询引擎&#xff0c;直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析&#xff0c;实现了Hive的SQL语义的子集&#xff0c;功能还在不断的完善中。 Hive hi…

impala理论篇之三:impala介绍

简介 Impala是Cloudera公司主导开发的新型查询系统&#xff0c;是Google Dremel的开源实现。它提供SQL语义&#xff0c;能够查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义&#xff0c;但是由于Hive底层执行使用的是MapReduce引擎&#xff…

Impala优化

作为铺垫&#xff0c;本文首先对Broadcast Join和Partitioned Join进行简要介绍。 Broadcast Join 顾名思义&#xff0c;Broadcast Join就是广播的方式进行Join。以下图为例&#xff0c;假设Join操作为SELECT A JOIN B ON A.idB.id&#xff0c;Broadcast Join就是将B表&#…

impala与hive的比较以及impala的有缺点

最近读的几篇关于impala的文章&#xff0c;这篇良心不错&#xff1a;https://www.biaodianfu.com/impala.html&#xff08;本文截取部分内容&#xff09; Impala是Cloudera公司主导开发的新型查询系统&#xff0c;它提供SQL语义&#xff0c;能查询存储在Hadoop的HDFS和HBase中的…

impala命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 impala 前言一、impala是什么 &#xff1f;二、使用步骤1.数据拼接2.exists()cast()regexp_like()nvl() 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1…

Apache Impala(1):Impala简介

1 Impala 基本介绍 impala 是 cloudera 提供的一款高效率的 sql 查询工具&#xff0c;提供实时的查询效果&#xff0c;官方测试性能比 hive 快 10 到 100 倍&#xff0c;其 sql 查询比 sparkSQL 还要更加快速&#xff0c;号称是当前大数据领域最快的查询 sql 工具&#xff0c…

大数据Impala系列之初识Impala

一、impala 概述 1、什么是Impala&#xff1f; Impala是用于处理存储在Hadoop集群中的大量数据的MPP&#xff08;大规模并行处理&#xff09;SQL查询引擎。 它是一个用C 和Java编写的开源软件。 与其他Hadoop的SQL引擎相比&#xff0c;它提供了高性能和低延迟。 2、为什么选…