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

article/2025/11/4 7:36:14
  • 实训目的

    设计并实现一个网络流量的分析系统。该系统具有以下功能:(1)实时抓取网络数据。(2)网络协议分析与显示。(3)将网络数据包聚合成数据流,以源IP、目的IP、源端口、目的端口及协议等五元组的形式存储。(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。在这些统计数据的基础上分析不同网络应用的流量特征。

  • 实训内容

(1)能够实时抓取网络中的数据包。并实时显示在程序界面上。用户可自定义过滤条件以抓取所需要的数据包。

(2)分析各个网络协议格式,能够显示各协议字段的实际意义。例如,能够通过该程序反映TCP三次握手的实现过程。

(3)采用Hash链表的形式将网络数据以连接(双向流)的形式存储。

(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。例如,抓取一段时间(如30分钟)的网络流量,将该段时间以固定时长(如1分钟)为单位分成若干个时间片,计算网络连接在每一个时间片内的相关统计量。并在上述统计数据的基础上分析不同应用如WEB、DNS、在线视频等服务的流量特征。注意,可根据实际的流量分析需要自己定义相关的统计量。

  • 主要设备和环境

硬件设备:

(1)台式计算机或笔记本计算机(含网络适配器)

软件设备:

(2)Windows操作系统

(3)网络数据包捕获函数包,Windows平台为WinPcap

(4)编程语言选用C/C++。

(5)编程环境为Code::Blocks

  • 设计步骤
  1. 配置环境

(1)编译环境为Code::Blocks,由于Code::Blocks在大一就经常使用,具体安装步骤可以省去。

(2)因为开发的程序需要网络编程,所以需要获取实时网络数据流,需要抓包,因此Windows平台上需要安装WinPcap环境,并在Code::Blocks中配置WinPcap的库函数。配置WinPcap步骤如下:

A.需下载WinPcap的运行库和WinPcap的开发包

   WinPcap运行库下载网址:

   https://www.winpcap.org/install/default.htm

   下载后按默认选项直接安装

   WinPcap开发包下载网址:

   https://www.winpcap.org/devel.htm

   下载在一个英文路径下,并解压。

   至此的结果截图如下:

   

B.打开Code::Blocks通过Settings->Compiler 在其中文本框输入WPCAP 和HAVE_REMOTE

C.打开WinPcap开发包的解压文件将其中的名为“Packet”和“wpcap”的文件

复制粘贴到CodeBlocks文件的 ..CodeBlocks\MinGW\lib\ 目录下如图:

在网上搜索WS2_32.lib文件,下载到本地,同样复制粘贴到和上述一样目录下如图:

接下来点击Code::blocks Settings->Compiler页面的Linker Setting,点击左下角的Add完成下面情形如图:

(libws2_32.a是原本就存在..\lib\ 目录下的文件)

 

D.仍在Settings->Compiler页面中找到Search directories并点击,然后点击左下角的Add完成下面的情形(也就是将Code::blocks目录下的include文件和WinPcap开发包解压文件目录下的Include文件Add)

E.最后点击OK完成在Code::Blocks中配置WinPcap的过程。

 

    2.显示主机所有网络适配器

设计代码检索机器所连接的所有网络适配器,并在在屏幕上显示本机连接的所有网络适配器的名称和详细信息,用户输入适配器的编号来选择适配器捕获包。首先利用pcap_createsrctr()函数初始化一个source,指明我们在哪里查找设备;然后使用函数pcap_findalldevs_ex()函数来获取网络设备信息,利用alldevs存储返回的接口信息,列出所有网络适配器的信息,最后输入你要选择的网络适配器的编号。初始化一个source,指明我们在哪里查找设备、使用函数pcap_findalldevs_ex()这个函数来获取网络设备、显示所有网络适配器信息、选择要使用的网络适配器的编号。

结果如下所示:

    3.显示选择的适配器的信息

   显示上一步输入编号的网络适配器的信息,通过定义一个ifprint()函数来输出选中的适配器的信息,同时在ifprint()函数中调用*iptos函数,将把数字IP地址转换为点格式

结果如下:

    

      4.打开指定的适配器

 

     5.指定文件存储捕获的数据包

 

     6.选择要获取的协议类型,首先要在main函数的开始做出如下声明,方便用户自由选择过滤规则,然后利用switch语句判断用户输入的编号,对应的编号和对应的过滤规则一致

结果如下:

   7.设置抓包时间的长短

   首先在main函数中设置抓包的时间长短,main函数中调用了*thread_clock()函数创建一个线程。其中需要调用thread_clock()函数。

结果如下:

   8.开始抓包

   调用pcap_loop()函数,捕获数据包。

      

  9.计算采样时每秒的比特数和每秒的数据包数量

首先打开文件对数据包进行分析,利用timeval记录当前时间和上一次采样时间,通过计算可以求出延迟时间,根据数据包大小,进行字节转换,求出采样时每秒的比特数以及每秒的数据包数量

结果如下:

10.分析各个网络协议格式,能够显示各协议字段的实际意义

(1)显示以太网协议各字段实际意义

   以太网协议格式如下:

Destination Address

目的MAC地址

[ 6 bytes ]

Source Address

源MAC地址

[ 6 bytes ]

Ethertype

以太网帧类型

[ 2 bytes ]

Data

数据部分

首先显示这是分析的第几个网络数据包、捕获的时间是多久以及数据包的长度;然后分析以太网各个协议字段的实际意义,显示以太网的类型、以太网的上层协议、MAC帧源地址以及MAC帧的目的地址;同时要求如果上层协议为IP协议则要继续解析IP协议。

以太网协议结果显示如下:

(2)显示IP协议各字段实际意义

IP报文格式如下:

IP报文格式

 

版本号

[4 bits ]

首部长度[ 4 bits ]

服务类型

[ 8 bits ]

报文总长度

[ 16 bits ]

标识 [ 16 bits ]

标志

[ 3 bits ]

片偏移

[ 13 bits ]

 

生存时间TTL

[ 8 bits ]

协议类型 [ 8 bits ]

首部校验和 [ 16 bits ]

 

源地址 [ 32 bits ]

 

目的地址 [ 32 bits ]

 

选项(如果有)

 

报文数据

 

首先根据IP报文格式,显示出IP版本号、首部长度、服务质量、总长度、标识、标志、偏移、生存时间、协议类型、校验和、源IP地址、目的地址各个字段的实际意义;然后根据IP协议的上层协议的类型,利用switch语句进行判断如果是TCP协议则继续解析TCP协议,如果是UDP协议则继续解析UDP协议。

主要代码如下:

IP协议结果如下:

(3)显示TCP协议各字段实际意义

   TCP协议格式如下:

源端口[16 bits]

目的端口[16 bits]

序列号[32 bits]

确认号[32 bits]

报头长度

[4 bits]

保留

[6 bits]

标志

[6 bits]

窗口[16 bits]

校验和[16 bits]

紧急[16 bits]

选项[可选]

数据

 解析TCP协议各个字段的含义,包括源端口、目的端口、SEQ、ACK_SEQ、fin标志位、syn标志位、rst标志位、psh标志位、ack标志位、urg标志位、ece标志位、cwr标志位、check、滑动窗口、紧急字段。最后根据目的端口判断如果目的端口是53,则继续向上解析DNS协议。

TCP协议结果如下:

(4)显示UDP协议各字段实际意义

UDP协议格式如下:

源端口[ 16bits ]

目的端口[ 16bits ]

用户数据包的长度[ 16bits ]

校验和[ 16bits ]

数据

 

 

输出源端口、目的端口、用户数据包长度和校验和。最后根据目的端口判断如果目的端口是53,则继续向上解析DNS协议。

UDP协议结果如下:

(5)显示DNS协议各字段实际意义

DNS协议格式如下:

会话标识[ 16bits ]

标志[ 16bits ]

问题数[ 16bits ]

回答资源记录数[ 16bits ]

授权资源记录数[ 16bits ]

附加资源记录数[ 16bits ]

查询问题区域

回答区域

授权区域

附加区域

在终端输出标识、标志、问题数、资源记录数、授权资源记录数、额外资源记录数、解析出来的域名和查询类型,结果如下:

11.抓包结束后输出文件已保存信息给用户提示

结果如下:

12.设置抓包的时长后系统开始抓包,抓包结束后调用pcap_close()关闭会话并释放适配器列表。

13.构建Hash表的过程

(1)首先以二进制形式读打开文件traffic1.data,用fp存储打开的文件

(2)定义一些以太网协议、IP协议、TCP协议、UDP协议格式的结构体和构建插入Hash表中需要的节点等,并初始化。主要代码如下:

(3)定义一些变量方便后续操作,其中利用ftell()函数用于确定文件当前指针相对于文件首部的偏移量,返回给定流 stream 的当前文件位置、feek()函数移动文件位置指针int fseek(fp,-packet_header_len,seek_cur) 设置流 fp的文件位置为给定的偏移 -pcket_header_len,参数 -packet_header_len 意味着从给定的 seek_cur 位置查找的字节数、fread(pkthdr,packet_header_len,1,fp) 从给定流 fp读取数据到 pkthdr 所指向的数组中,packet_header_len是读取的每个数据的长度,1是读取的数据的个数,同时初始化第一个包的开始时间。

(4)用户在终端输入分析的周期,并将分析周期写入result.data文件

   在终端结果显示如下:

在result.data文件中显示如下:

(5)当文件的指针在文件长度偏移范围内进行如下操作

在result.data包中写入每一个周期内包的开始时间到结束时间,并在result.data文件中分别写入TCP和UDP的结果,如果是TCP还要再在文件中输出Hash表的结构。

在result.data文件中显示如下:

判断当前以太网协议的类型是否为IP协议,若不是移动文件指针的偏移量再进行判断,若为IP协议则要进一步判断上层协议是否为TCP和UDP协议,若不是则继续读下一个包,若为TCP和UDP协议则进行下一步处理。

A.为TCP和UDP协议,下面要将ip的源地址和目的地址赋值给五元组中记录源地址和目的地址的元素,并记录其上层协议类型。

B.如果上层协议为TCP类型,则要在终端实现输出。输出是第几个数据包中的协议、以太网上层协议类型、IP上层协议类型(这里为TCP报文)、源IP地址、源端口号、目的IP地址、目的端口,输出的过程中调用了upper_protool()函数,upper_protool()函数的作用是为了判断TCP上

层协议为何种类型

在终端输出的结果如下:

C.如果上层协议为UDP类型,则要在终端实现输出,输出是第几个数据包中的协议、以太网上层协议类型、IP上层协议类型(这里为UDP报文)、源IP地址、源端口号、目的IP地址、目的端口,输出的过程中调用了upper_protool()函数,upper_protool()函数的作用是为了判断UDP上层协议为何种类型,在之前输出的结尾加上上层协议类型,若不是常用协议类型则不输出。在终端输出结果为:

D.在Hash表、UDP链表中插入节点,并在文件在显示Hash表和UDP链表的情况。

E.输出抓包过程中统计的所有TCP和UDP上层协议类型的个数,调用print_upper_protool()函数,输出所有协议总数。结果如下:

F.Hash表构建完成之后,对traffic1文件分析结束后释放节点和链表。

 

 

基于WinPcap的网络流量在线分析系统源代码网址:https://download.csdn.net/download/weixin_43545546/11338561


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

相关文章

IPv6网络流量分析及性能监控

关键词:IPv6 网络安全 全流量分析 性能监控 运维管理 前言 为全世界每一粒沙子都可以分配一个IP地址,以前听起来很遥远,其实,它早已走进了我们的现实,是的,这就是IPv6,它专门为解决IPv4地址不…

网络流量分析工具(tcpdump)

Linux 作为网路操作系统提供基础网络服务,在很多情况下需要一款能够进网络数据采集和分析的工具。例如: 在服务器受到网络攻击时,需要分析攻击包的格式和内容,以便采取针对性的封锁手段。在网络应用程序异常崩溃时,需要确认应用程…

HTTPS网络流量分析方法简介

信息技术高速发展,基于Web的主流形式业务应用不再是HTTP裸奔了,多数网站和应用系统都上了HTTPS。 作为网络运维人员,不来个抓包分析,疑难杂症的确难以得出精准结论,但分析面对清一色的HTTPS业务运行监测或故障分析&…

Moloch网络流量分析工具

一、概述 Moloch包分析在很大程度上包括对Moloch和Elasticsearch的理解。包取证和分析将帮助您理解进行包分析的MOLOCH和搜索取证索引包的Elasticsearch。两个工具将实时执行该活动,以解决DOS攻击、DDOS攻击、内部威胁、访问情报、带宽问题等诸多问题。 二、Moloc…

wireshark流量分析实战

wireshark Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。 下面是在网上找的数据包…

网络协议分析与仿真课程设计报告:网络流量分析与协议模拟

公众号:CS阿吉 网络协议分析与仿真课程设计报告 题 目:网络流量分析与协议模拟 专业名称: 网络工程 班 级: 学生姓名: 阿吉 学号(8位): 指导教师&…

CCS 2021 | 自动化网络流量分析新方向

CCS 2021 | 自动化网络流量分析新方向 一、摘要二、nPrint三、nPrintML四、实验4.1 Overview4.2 主动设备指纹识别(Active Device Fingerprinting)4.3 被动操作系统指纹识别(Passive OS Fingerprinting)4.4 DTLS 应用识别&#xf…

24学习网络流量分析工具 Wireshark 的基本用法,包括数据捕获、分析

Wireshark是一款常用的网络流量分析工具,可用于捕获、分析和监控网络流量。以下是Wireshark的基本用法教程。 Wireshark 下载并安装Wireshark 在官网下载并安装Wireshark:Wireshark Download 打开Wireshark并选择网络接口 打开Wireshark后&#xff0…

Wireshark流量分析

Wireshark流量分析 开始抓包wireshark过滤器表达式wireshark着色规则数据流的追踪数据包的统计分析数据包的大致结构网络分析只抓包头只抓必要的包自动分析搜索 开始抓包 打开wireshark后,按ctrlK,勾选需要抓包的网卡 点击Start开始抓包 wireshark过滤器…

开源 | 爱奇艺网络流量分析引擎QNSM及其应用

▌导读 一定业务规模的互联网公司的基础设施的网络边界通常都呈现一定程度的复杂多分区的情况,如何进行有效的安全防护和控制会成为安全体系建设的重点和难点。面对这一挑战,爱奇艺安全团队自研了网络流量分析引擎QNSM,并将其用在各种基于流量分析的跨区…

网络攻击与防御之网络流量分析实验

实验一 网络流量分析 本次实验所使用到的主要软件包括:虚拟机(VMware/VirtualBox), 流量分析软件(Wireshark, Zeek或科来网络数据包分析软件),网络扫描工具nmap,浏览器(Chrome或IE)。 每个题目给出主要操作步骤、截图和分析。 一. 虚拟机环…

网络流量分析之流量采集到流量还原

网络流量贯穿业务流转的各个环节,从我们个人PC、手机,到IDC数据中心、WEB和APP应用等都需要通过网络流量完成数据交互。因此,根据"只要有攻击就会有流量产生"这样的朴素道理,无论是网络层的防DDoS、主机层的防入侵还是应…

网络流量分析系统的价值

一、网络流量分析技术介绍 1.1什么是网络流量分析? 网络流量分析是记录和分析网络流量以出于性能、安全性、网络操作、管理和排障为目的分析网络流量的过程。它是使用自动技术检查网络流量中的详细级别细节和统计信息的过程。 1.2网络流量分析技术的作用 网络流量分…

网络流量分析技术

网络流量分析技术 实验目的实验内容实验文件中涉及的相关协议攻击与防御方法1.攻击:2.应对的防御方法: 实验目的 利用Wireshark网络分析工具分析关于“极光攻击”的实验文件,分析实验文件中涉及的相关协议以及攻击与防御方法等内容。 实验内…

网络流量分析详解(包含OSI七层模型、TCP协议及Wireshark工具用法)

网络流量分析 Network Traffic Analysis(NTA) 这个系列讲的是整个网络流量分析流程,其中包含TCP协议、HTTP协议详解和Wireshark、Tcpdump的详细用法,现在只完成了其中一部分内容,每周更新,感兴趣的可以持续关注一下~ 内容比较杂…

Unity引擎基础补充

Unity引擎基础补充 本博客将对之前的Unity脚本,3D数学基础博客内容做一定的补充。所以部分知识点可能并不全。 使用Unity的API,我们要清楚各个参数其代表的含义。 文章目录 Unity引擎基础补充3D数学基础Math和Mathf的区别Lerp 3D数学向量向量模长&…

Unity引擎

------ Oracle中文开发者社区 ------ 如果你想要学习编程,关注本博客,持续获得技术支持,持续获得技术咨询 java开发企业官方账号 Oracle中国官方账号 Java中国管理部 全网粉丝30万 华为云享专家 阿里专家博主 CSDN内容合伙人 CSDN原力计划作者 51CTO专家博主 CSDN博客V账号 …

unity教程之Unity引擎

中国传媒大学老师所主讲的,所用到的unity版本为2018版unity教程之用到的资源也都提供了下载链接,视频的时长大部分控制在20-40分钟之内,此课程讲解了地形,脚本,动画,图形渲染,物理系统&#xff…

Havok物理引擎与Unity3D的结合

背景  在重度手游的研发过程当中,游戏中的车辆模拟,场景互动,特效展示等功能很多时候需要物理引擎的介入,以提供丰富的交互体验。目前3D手游的开发主要工具是使用Unity3D引擎,于是,如何在Unity3D的开发过…

unity物理引擎介绍

早期的游戏并没有强调物理引擎的应用,当时无论是哪一种游戏,都是用极为简单的计算方式做出相应的运算就算完成物理表现,如超级玛丽和音速小子等游戏。 较为常见的物理处理是在跳跃之后再次落到地上,并没有特别注重物理表现效果。…