• 实训目的

设计并实现一个网络流量的分析系统。该系统具有以下功能:(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

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

  1. 网络流量在线分析系统的设计与实现+winpcap+vscode+mingw

    21.2.17更新:替换未渲染的plantuml流程图 前言 文章源地址:https://blog.csdn.net/pi31415926535x/article/details/107230805 ...

  2. 网络抓包与流量在线分析系统的设计与实现-基于libpcap在MacOS上实现 记录这愉快(DT)的一周

    网络抓包与流量在线分析系统的设计与实现-基于libpcap在MacOS上实现 记录这愉快(DT)的一周 要求: 基于LINUX系统设计并实现一个网络流量的分析系统.该系统具有以下功能:(1)实时抓取网 ...

  3. android流量监控软件设计与实现,基于android平台的流量监控系统的设计与实现

    摘要: 为了解决流量超额使用,恶意流量吸费的非法插件以及软件恶意联网的问题,帮助用户安全放心使用手机,本文设计并实现了一款基于Android平台的流量监控系统. 本文以Android系统为平台,分别从 ...

  4. 基于ASP.NET网站流量统计系统的设计与实现

    在这个网络急速发展的时代,网站在日常生活中是必不可少的,网站所产生的付出回报率相对应的就显得尤为重要,一个强大.方便的网络流量统计管理系统能使网站的使用变得更加方便快捷.当前国内在这个方面的研究做的比 ...

  5. 基于jsp(java)网络教学平台系统的设计与实现

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye2 摘 要 远程教育作为现代教育技术的形式,给教育思想与技术带来了革命性的变革,己经成为现代教育的 ...

  6. 基于jsp(java)网络教学平台系统的设计和开发(含源文件)

    获取项目源文件,联系Q:1225467431,可指导毕设,课设 摘 要 远程教育作为现代教育技术的形式,给教育思想与技术带来了革命性的变革,己经成为现代教育的必然要求.远程教育要得以顺利.高效的实施, ...

  7. 【毕业设计】基于SSM的网络在线考试系统的设计与实现

    文章目录 前言 1 课题描述 2 相关技术 3 系统需求分析 3.1 功能需求分析 3.1.1 学生端: 3.1.2 超级管理员端: 3.1.3 试题管理员端(老师): 4 系统设计框架 4.1 系统 ...

  8. 基于SSH的网络预约挂号系统的设计与实现

    目录 摘 要 I ABSTRACT II 1 引言 1 1.1项目开发的背景 1 1.2项目开发的目的 1 1.3国内外研究现状 2 1.4本课题研究内容 2 1.5本文结构安排 3 2 开发前分析 ...

  9. 【完整代码及文档】基于Java的网络聊天室系统的设计与实现

    摘 要 计算机从出现到现在有了飞速的发展,现阶段的计算机已经不单单是用于进行运算的独立的个体了,跟随计算机一同发展的还有互联网技术,经过了长久的发展,互联网技术有了日新月异的发展,它的发展速度和计算机 ...

  10. 基于Java的网络兼职平台系统的设计与实现(论文+程序设计+数据库文件)

    摘 要 I ABSTRACT II 引 言 1 1概述 1 1.1开发背景与意义 1 1.2开发环境 1 2系统分析 2 2.1可行性分析 2 2.1.1技术可行性 2 2.1.2经济可行性 2 2. ...

最新文章

  1. Adnroid文件存储路径getFilesDir()与getExternalFilesDir的区别
  2. Python基础-面向对象编程
  3. Centos用cron定时执行PHP
  4. 北航研究生计算机系论文手册,计算机学院-北航研究生院-北京航空航天大学.doc...
  5. Linux下socket最大连接数 ulimit -n 最大值修改
  6. 设置打包方式为war
  7. activity 、window与view的关系 (上)
  8. Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法
  9. asp.net mvc Autofac 依赖注入框架 使用
  10. 【工具】中国菜刀 官方原版下载 官网下载链接
  11. 白话Android音频系统原理
  12. stc15流水灯c语言,STC89C52单片机流水灯
  13. 2020 年博客总结
  14. 推荐系统之协同过滤概述
  15. MySQL5.7安装教程(workbench安装教程会在之后出)(32位和64位均可)
  16. python 期货现货差价监测_数字货币期货现货差价监控
  17. accumulate函数
  18. python倒计时定时器_使用python修饰器的定时器倒计时
  19. PPT分享:基于Eventuate平台解决微服务架构难题
  20. 什么是长连接,什么是短连接

热门文章

  1. ps使用教程 核心蒙版
  2. kafka-Streaming错误:在IDEA连接kafka时出现错误
  3. 基于文本挖掘的情人节微信聊天记录情感分析
  4. JAVA操作FTP(FTP工具类)
  5. 实现微信小程序授权获取手机号登录(c#后端代码附上 少爷接收)
  6. Cloudera Manager Agent 的 Parcel 目录位于可用空间小于 5.0 吉字节 的文件系统上。 /opt/cloudera/parcels(可用:5.0 吉字节 (12.74%)
  7. oracle实时备份归档日志实现异机恢复丢失数据最小化
  8. 模拟城市5一直显示服务器中断,EA关闭《模拟城市5》非关键功能缓解服务器问题...
  9. 分形之皇冠(Crown)
  10. jenkins 插件_Jenkins通过Ruby插件赢得了新的皇冠