网络流量在线分析系统的设计与实现
实时流量在线监测系统开发与实现

中 图法 分 类 号 :T P 3 9 1
随着社 会经 济 的发 展 , 社 会 各 界 对 水 文资 料 的要 求 越来 越高 。全 国 中小 河 流 监测 建设 项 目的实 施 , 对
2 野 外 监测 点 组 成
野外监 测站点测 流设施 主要 由传感 器 、 控 制 器 ( R T U) 、 通信 传输 、 电源 以及 基 础 设 施 5部分 组 成 ( 图 1 ) 。传 感 器是指 流 速仪 和 水位 仪 , 主要 用 于 实 时采 集
特征 断面 流速 和水位 数据 。控 制器 有多 种接 口与 传感 器进行 连接 ( 如: S D I 一1 2 , R S 2 3 2 , R S 4 8 5等 ) 。控 制 器 是野外 监 测站点 的 核心 , 主要 用 于 控 制 传 感 器 功 能是 实时接 收 断面流 速 和水
位 数据 并将 数据 写入 本 机 自定 义文 件 中 , 同时 可 远 程
设 置野 外监 测点参 数 , 招测 断面水 位 , 校正设 备 时 间等
功 能 。数据 采集 时 间同步可 保证 实时 地反 映真 实断 面
勒频 移获得 流体 流 速 数据 的 , 即流 速 测 量 是 通 过测 量
多普 勒频移 进行 的 。多普 勒频 移是 指 当波源 与观 察者 之 间有相对 运 动时 , 观 察 者所 接 收 到 的频 率 与 波 源 的 真实频 率不 同 , 接收 信 号 的频 率 与 声 源 频 率之 差 由两
波和雷 达 波 , 不论 使用 哪种 波 , 多普 勒流 量计 测流原 理 均 是 多普勒 频移 原理 。
NetStream流量分析系统的研究与设计的开题报告

NetStream流量分析系统的研究与设计的开题报告一、选题的背景与意义随着网络带宽速度的提升和多媒体内容的丰富化,视频流的应用越来越广泛。
然而,网络视频流的可靠性和稳定性对用户的体验具有非常重要的作用。
尤其是对于在线直播、视频点播等视频服务,用户时刻都在关注视频质量和流畅度。
如何对视频流的质量进行监测、评估和改进,成为了一个重要问题。
因此,本课题旨在研究基于NetStream的流量分析系统,通过对视频的流量和带宽进行监测和分析,提高视频的质量和用户的体验。
一方面,该系统可以实现对流量的实时监测和分析,提高视频流的实时性和稳定性;另一方面,该系统可以对用户的观看体验进行统计和分析,提供用户喜好方向及提高视频内容质量的依据。
因此,该系统对于提升网络视频质量和用户体验具有重要意义。
二、研究目标本课题的研究目标如下:1. 设计一个基于NetStream的流量分析系统,能够实时监测和分析视频流量以及用户观看体验。
2. 分析视频流中的帧率、码率、带宽等参数,通过分析结果反馈到视频服务端,提高视频的流畅度和稳定性。
3. 分析用户的观看体验,了解用户的观看偏好,提供视频内容优化的依据。
三、研究内容本课题的研究内容如下:1. NetStream流量分析系统的设计方案。
2. 流量监测和分析方法的研究和实现。
3. 视频流质量监测和反馈方法的研究和实现。
4. 用户观看体验分析方法的研究和实现。
5. 基于系统运行结果和用户反馈的优化策略研究。
四、研究方法本课题采用以下研究方法:1. 文献综述法:对NetStream、流量分析和视频质量评估等相关领域的文献进行综合分析,了解研究现状和未来发展方向。
2. 系统设计法:基于综述分析的结果,设计NetStream流量分析系统的整体架构和模块设计。
3. 系统实现法:根据设计方案,进行系统的具体实现和测试。
4. 数据分析法:通过分析系统监测数据、用户反馈及优化策略,不断优化系统性能。
计算机网络中的流量分析方法与应用

计算机网络中的流量分析方法与应用随着互联网的广泛应用和技术的飞速发展,网络安全成为了互联网进一步发展的重要瓶颈。
网络安全问题可以说涉及到计算机网络的各个方面,其中流量分析更是其中关键的一环。
流量分析是指从网络通信中抓取数据包并进行分析,以便得到网络通信的相关信息,从而对网络安全进行防范和检测。
本文将结合实际案例,介绍计算机网络中的流量分析方法及其应用。
一、流量分析的方法1. 抓包工具抓包工具是一类可以从网络中拦截网络通信数据的软件工具。
通过使用抓包工具,可以实现对网络通信数据进行分析,侦测网络流量瓶颈、网络攻击等一系列操作。
常用的抓包工具有Wireshark、Tcpdump等。
Wireshark可以以图形化的方式方便地显示各种协议信息,支持上千种协议包括TCP、UDP、HTTP、SSH、FTP、SMTP等等。
Tcpdump则是一个命令行工具,可以实时抓取和解码网络数据包,支持过滤掉不需要的内容。
2. 流量分析方法流量分析方法是指在抓包工具基础上,对抓取的网络数据包进行分析,以得到网络通信的相关信息。
流量分析方法有以下几种:(1)协议分析网络通信过程中采用的协议种类较多,协议分析就是抓取数据包后,对其中的协议包进行解析和分析。
协议分析可以分为两个层级:网络层面和应用层面。
网络层面协议分析主要是对IP、TCP/UDP等协议进行深度研究,应用层分析则是对应用层协议例如HTTP、DNS、SMTP等进行分析。
通过分析协议信息,可以获得一些有用的信息,例如IP地址、端口号、访问计数、流量大小等等。
(2)数据包重建数据包重建是指抓取到的多个数据包通过一个特定的规则进行组合和重建,以还原出原始数据的过程。
重建后的数据包可以被用于数据包内容及其属性的分析。
数据包重建命令在Wireshark等抓取工具中可以直接使用。
3. 网络流量的常见指标网络流量的常见指标包括:(1)包速率——单位时间内收发的数据包数量(2)位速率——单位时间内收发的数据总量,通常以bps(比特/秒)为单位(3)时延——从发向网络的数据包到其到达目的地所需的时间(4)抖动——时延的抖动范围,即数据包到达目的地的时间的波动情况(5)可靠性——数据包在传输过程中损坏或丢失的频率二、流量分析的应用1.网络入侵行为检测网络入侵是指未经授权访问计算机系统或利用计算机系统漏洞进入、破坏计算机系统和网络的行为。
基于SDN的网络流量监测与分析方法研究

基于SDN的网络流量监测与分析方法研究随着网络技术的不断发展和普及,网络流量的监测与分析变得越来越重要。
基于软件定义网络(SDN)的网络流量监测与分析方法由于其灵活性、可扩展性和可编程性的优势,成为当前研究热点之一。
本文旨在探讨基于SDN的网络流量监测与分析方法的研究进展,包括流量监测原理、分析方法以及应用场景。
首先,我们来了解一下基于SDN的网络流量监测的原理。
SDN将网络控制平面和数据平面分离,通过集中式的控制器来对网络进行管理和控制。
在SDN中,流量监测通过将流量转发表项指向特定的监测点来实现。
这些监测点可以是交换机、路由器或专用的监测设备。
通过在SDN控制器中定义流量监测规则,可以对网络流量进行实时的监测和分析。
其次,基于SDN的网络流量分析方法可以分为两类:在线分析和离线分析。
在线分析是在网络实时运行时对流量进行分析,可以及时发现网络中的异常情况。
而离线分析是在离线环境下对网络流量进行分析,可以对历史流量进行深入挖掘和分析。
这两种方法可以相互结合,实现全面而深入的网络流量监测与分析。
在基于SDN的网络流量监测与分析方法中,常用的技术包括流量采样、流量分类和流量预测。
流量采样是一种常用的方法,通过对部分数据包进行采样,可以减少流量监测的开销。
流量分类可以将网络流量按照协议、应用或用户进行分类,从而对不同类型的流量进行有针对性的分析。
流量预测可以通过统计学和机器学习算法来分析历史流量数据,从而预测未来的流量趋势。
基于SDN的网络流量监测与分析方法可以应用于多个领域,包括网络安全、质量保证和性能优化等。
在网络安全方面,基于SDN的网络流量监测可以实时检测和响应网络中的威胁和攻击,从而加强网络的安全防护能力。
在质量保证方面,基于SDN的网络流量监测可以对网络中的延迟、丢包和带宽等指标进行实时监测和分析,从而提高网络的服务质量。
在性能优化方面,基于SDN的网络流量监测可以识别网络中的瓶颈和故障,并根据实时的流量情况进行网络优化,从而提高网络的性能和效率。
图书馆网络流量分析及解决方案1

图书馆网络流量分析及解决方案尊敬的各位领导:10月中旬以来,我院校园网网速出现了不稳定的现象,影响了正常的办公与教学,网络中心马上咨询了青州联通网络中心工作人员,他们确认外网速度没有变化。
经过网络中心与济南华思网络公司技术人员仔细排查,最终发现图书馆电子阅览室流量巨大,高峰值达到70M,造成学院整个网络堵塞。
经网络中心、教务处、图书馆大家共同分析,认为造成这种现象主要是以下的原因。
一、关于带宽1. 青州市城区带宽仅为100M,学院和整个云河区共享的全部带宽为100M。
学院这100M的带宽分配给任何一个部门的带宽多了,必然会影响其他部门的带宽和上网速度。
网络中心必须在现有带宽的前提下,优先保证办公网络的正常运行,进而优化各楼的流量。
对于学院网络带宽的分配,网络建成运行后,一直采取以下原则:学生宿舍:下半年学生共有456台机器上网,每台机器已限速为100K,平常情况约有200台同时上网,要占用20M的带宽。
高峰时段主要是晚上,基本上全部在线,流量大约占到40M。
各办公、教学楼:大约有300台机器,即使每台机器分配120K,正常办公时段也有40M的流量。
教学系(室)实验室:每个实验室只分配给2M带宽,学院共有11个实验室,占用带宽约20M。
电子阅览室:共有320台机器,平时入座率较高,按每台机器200K(看电影、BT、迅雷下载的较多),平时200台机器上网,占用带宽40M左右,随着人数的增多,高峰值时为70M。
再加上电子阅览室内网电影服务器架设在楼层交换机后面,学生观看内网电影时的流量也经过楼层交换机,也影响了电子阅览室对外网的访问。
总之:这几部分流量中,电子阅览室的流量巨大,如果不进行流量限速,肯定影响办公网络的正常使用,即使增加带宽,不限速也会影响整个网络使用。
二、限速问题1. 目前电子阅览室内网带宽已经全部放开。
外网带宽分时段限速,已经在进行测试和优化。
2. 为保证校园网整体运行正常,各教学、行政等办公室和机房都根据需要调控限速,所以可能存在部分教职工反应网速慢的问题。
有效管理网络流量——接入网流量数据采集与分析系统介绍

该 模 块 主 要
用来向最 终用户
显示 相 应 的安 全
该部分实现了服务器端与服务器端信 信息 。方式有两
息进行 同步的功能 ,服务器可 以同时从一 种, 一种是使用标
4 、在整体构架中采用了P P 2 技术, 保 证系统在局部网络故障中也能有效升级 ; 5 、采用时间戳技术 , 保证系统能够增 量更新 ,节省带宽,加快更新速度。
不断扩大,且网络结构和网上应用日 渐复 采用一些通用型的网络链路利用率的监视 N t o ef w原来用于数据交换加速的功能已 l 杂。为更好地管理网络、保障网络稳定运 软件, MR G, 如 T 利用S MP协议对网络 经逐步由网络设备 中的专用 A I 芯片实 N SC
行、为用户提供优良的网络环境,网络管 的重点链路和互联点进行简单的端 口 级流 现, 而对流经网络设备的 I数据流进行测 P
理 者要实时监控 自身网络的负载状 况和重 量监视和统计;或利用 R N I I协议 量 和统计的功能也 已更加成熟 ,并成为 当 MO /I
要业务的带宽占用率;准确计量国际、国 对网络中部分端口进行网络流量和上层业 今互联网领域公认的最主要的 I P流量分
内、教育网内、骨干网/城域网间通信流 务流量 的监视和采 集。这两种 网络流量分 析、统计和计费行业标准。N to ef w技术 l
进行 同步 更
图 2资源管理的具体实现流程
有效的为广大用户提供最新最全面的安全
技术特 点
1系统整体结构设计自主创新 ; .
信息 。 目
( 作者单 位为 C P1 应急响应组 ) E E ¥T
新 ,具体流
5 国 育 络27 8中 教 网 。 。
如何进行网络流量的实时监控和分析(一)

网络流量的实时监控和分析在当今社会中变得越来越重要。
随着越来越多的人接入互联网,网络攻击和数据泄露的威胁也随之增加。
因此,有效的网络流量监控和分析对于保护个人和组织的信息安全至关重要。
一、为什么需要网络流量的实时监控和分析随着信息技术的进步,网络已经成为人们日常生活和工作中不可或缺的一部分。
人们在互联网上进行各种活动,例如浏览网页、在线购物和社交媒体使用。
同时,各种软件和应用程序也需要通过网络连接到远程服务器进行数据交换。
由于这些操作涉及的数据量通常很大,网络流量监控和分析可以帮助我们实时了解网络中的各种活动,确保网络的安全和稳定。
二、如何进行网络流量的实时监控要进行网络流量的实时监控,我们首先需要利用合适的工具或软件来收集和分析网络流量数据。
一种常用的方法是使用网络流量监控工具,例如网络数据包分析器。
这些工具可以捕获传输过程中的网络数据包,并提供分析报告。
另外,还可以使用网络审计软件对特定的网络活动进行实时监控和记录。
这些工具可以帮助我们快速发现异常网络活动,并采取相应措施。
此外,还可以利用入侵检测系统来监控和分析网络流量。
入侵检测系统可以通过比较网络流量与已知攻击模式的差异来检测潜在的网络入侵。
通过实时监控和分析网络流量,我们可以快速发现并阻止任何潜在的网络攻击。
三、如何进行网络流量的实时分析网络流量的实时分析可以帮助我们更好地理解和管理网络中的数据交换。
一种常用的方法是使用流量分析工具来识别和提取有用的信息。
这些工具可以帮助我们实时监控网络流量的带宽占用、数据传输速度以及网络延迟等关键指标。
通过分析这些指标,我们可以及时发现并解决网络故障,提高网络的性能和可靠性。
此外,还可以利用流量分析工具进行网络行为分析。
通过分析网络流量,我们可以了解用户的上网习惯、常用应用程序以及数据传输的目的地等信息。
这些信息对于优化网络资源分配、提高数据传输效率和制定网络安全策略等方面都非常有价值。
四、网络流量的实时监控和分析的挑战尽管网络流量的实时监控和分析可以带来巨大的好处,但实施起来也会面临一些挑战。
基于FPGA+TCAM架构的网络分流系统的设计与实现

基于FPGA+TCAM架构的网络分流系统的设计与实现鲁佳琪;黄芝平;刘纯武;刘德胜;陈实【摘要】网络流量分类技术为网络服务提供有力保障,在网络行为分析和网络监管方面发挥重要作用.设计并实现了一种基于FPGA+TCAM架构的网络分流系统,接入高速网络信号,恢复数据流信息,并对其进行分流管理.解决了传统网络分流系统接入速率不高,分流效果差的问题.最后对系统平台进行了测试,测试结果表明,该系统具备在高速网络环境下数据流实时分流处理的能力.【期刊名称】《微型机与应用》【年(卷),期】2016(035)015【总页数】5页(P65-68,71)【关键词】网络流量;分流;三态内容可寻址寄存器;现场可编程门阵列【作者】鲁佳琪;黄芝平;刘纯武;刘德胜;陈实【作者单位】国防科学技术大学机电工程与自动化学院,湖南长沙410073;国防科学技术大学机电工程与自动化学院,湖南长沙410073;国防科学技术大学机电工程与自动化学院,湖南长沙410073;国防科学技术大学机电工程与自动化学院,湖南长沙410073;国防科学技术大学机电工程与自动化学院,湖南长沙410073【正文语种】中文【中图分类】TP393;TP302网络流量分类技术是指将混合有各种应用的流量,按其相关特性进行分类的技术。
网络流量分类一直是学术界和产业界关注的重点之一。
对学术界来说,网络流量分类是高性能网络协议和应用设计的基础;对运营商来说,网络流量分类是网络运营管理、网络发展规划、网络流量调度和高效能业务前瞻的依据[1] 。
因此,进行网络流量分类相关领域的研究具有重要的理论和现实意义。
但是,传统分流设备由于不能适应高速网络环境,导致处理效率和准确率不高。
传统设备的缺点一直制约着网络流量分类技术研究的发展。
因此,设计并实现高接入速率、高处理效率的分流系统迫在眉睫。
网络流量分类技术分为软件和硬件两种主要实现方式。
已有的软件算法包括:(1)键树结构的分类算法:包括分层树和扩展树两种结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
综合实训报告题目:网络流量在线分析系统的设计与实现华中农业大学正方教务系统王枫指导老师:***信息学院计算机科学系目录一、实训目的 (3)二、实训内容 (3)三、主要设备及环境 (4)四、设计与步骤 (5)五、整理与小结 (17)六、参考文献 (18)一、实训目的设计并实现一个网络流量的分析系统。
该系统具有以下功能:(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)编程环境为codeblocks四、设计与步骤(1)定义 mac,以太网帧,IPv4 首部,TCP 首部, UDP 首部与一些用于设置时间的结构体,回调函数原型包括哈希表的插入,搜索,初始化。
* 6字节的mac地址 */typedef struct mac_address{u_char byte1;u_char byte2;u_char byte3;u_char byte4;u_char byte5;u_char byte6;} mac_address;/* 以太网帧 */typedef struct ethernet_header{mac_address daddr; //目的MAC地址mac_address saddr; //源MAC地址u_short etherType //以太网帧类型} ethernet_header;/* IPv4 首部 */typedef struct ip_header{u_char ver:4,ihl:4; // 版本 (4 bits) + 首部长度 (4bits)u_char tos; // 服务类型(Type of service)u_short tlen; // 总长(Total length)u_short identification; // 标识(Identification)u_short flags_fo; // 标志位(Flags) (3 bits) + 段偏移量(Fragment offset) (13 bits)u_char ttl; // 存活时间(Time to live)u_char proto; // 协议(Protocol)u_short crc; // 首部校验和(Header checksum)struct in_addr saddr; // 源地址(Source address)struct in_addr daddr; // 目的地址(Destinationaddress)u_int op_pad; // 选项与填充(Option + Padding)} ip_header;/* TCP 首部*/typedef struct tcp_header{u_short sport; // 源端口(Source port)u_short dport; // 目的端口(Destination port)u_int32_t snumber; //序列号u_int32_t cnumber; //确认号u_short reserve:6, //保留位tlen:4, //报头长度//后6位标志位fin : 1, //关闭连接标志syn : 1, //请求连接标志rst : 1, //重置连接标志psh : 1, //接收方尽快将数据放到应用层标志ack : 1, //确认序号标志urg : 1, //紧急指针标志ece : 1, //拥塞标志位cwr : 1; //拥塞标志位u_short window; //窗口u_short csum; //校验和u_short urgent; //紧急u_int op_pad; // 选项与填充(Option + Padding)} tcp_header;/* UDP 首部*/typedef struct udp_header{u_short sport; // 源端口(Source port)u_short dport; // 目的端口(Destination port)u_short len; // UDP数据包长度(Datagram length) u_short crc; // 校验和(Checksum)} udp_header;/*用于设置时间的结构体*/typedef struct argument{pcap_t *adhandle;int time;}argument;void crawl_time(void *time_c);/* 回调函数原型 */void packet_handler_mac(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);void packet_handler_ip(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);void packet_handler_tcp(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);void packet_handler_udp(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);void InitHashTable(HashTable* H)//初始化哈希表{int i;H -> count = MAXSIZE;H -> Table = ( HashNode* )malloc( ( H->count ) *sizeof( HashNode ) );for(i = 0;i < H->count; i++){H->Table[i].ip_source_address;H->Table[i].ip_dest_address;H->Table[i].source_port = 0;H->Table[i].dest_port = 0;H->Table[i].sum = NULLKEY;H->Table[i].next = NULL;}}int Hash(int key){return key % MAXSIZE;}int InsertHashTable(HashTable *H,struct in_addrsource_address,struct in_addr dest_address,u_int16_ts_port,u_int16_t d_port,int key)//插入哈希表{int addr;addr = Hash(key);if(H->Table[addr].sum != key && H ->Table[addr].sum != NULLKEY){HashNode *hashnode = (HashNode*)malloc(sizeof(HashNode));hashnode->next = H->Table[addr].next;hashnode->ip_source_address = source_address;hashnode->ip_dest_address = dest_address;hashnode->sum = key;hashnode->source_port = s_port;hashnode->dest_port = d_port;H->Table[addr].next = hashnode;addr++;return addr;}else if(H->Table[addr].sum == NULLKEY){H->Table[addr].sum = key;return addr;}}bool SerchHashTable(HashTable *H,struct in_addrsource_address,struct in_addr dest_address,u_int16_ts_port,u_int16_t d_port,int key)//搜索哈希表{int addr;addr = Hash(key);if(H->Table[addr].sum == key &&(inet_ntoa(H->Table[addr].ip_source_address) ==inet_ntoa(source_address)) &&(inet_ntoa(H->Table[addr].ip_dest_address) ==inet_ntoa(dest_address)) &&(H->Table[addr].source_port == s_port) &&(H->Table[addr].dest_port == d_port)){return true;}HashNode *p = H->Table[addr].next;while(p != NULL){if((p->sum == key) && (inet_ntoa(p->ip_source_address) == inet_ntoa(source_address)) &&(inet_ntoa(p->ip_dest_address) ==inet_ntoa(dest_address)) &&(p->source_port == s_port) &&(p->dest_port ==d_port)){return true;}elsep->next;}return false;}2./*获得设备名,检索机器所连接的所有网络适配器,并在屏幕中显示适配器的名称和详细信息,用户可以输入适配器编号选择指定的适配器用来捕获,代码与结果显示如下:*/if (pcap_createsrcstr(source, PCAP_SRC_IFLOCAL, NULL, NULL, NULL, errbuf) == -1) {printf("%s\n", errbuf);exit(-1);}/* 获得设备列表 */if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1);}/* 打印列表 */for(d=alldevs; d; d=d->next){printf("%d. %s", ++i, d->name);if (d->description)printf(" (%s)\n", d->description);elseprintf(" (No description available)\n");}if(i==0){printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return -1;}while(inum < 1 || inum > i){printf("Enter the interface number (1-%d):",i); scanf("%d", &inum);if(inum < 1 || inum > i){printf("输入有误,请重新输入!!\n");}}截图如下:3. /*选择过滤协议*/int chang1 = 0;printf("\n过滤协议如下:");printf("\n\t1、MAC");printf("\n\t2、IP");printf("\n\t3、IP and TCP");printf("\n\t4、IP and UDP");printf("请选择:");scanf("%d",&chang1);while(chang1 < 0 || chang1 > 4){printf("输入有误,请重新输入:\n");scanf("%d",&chang1);}switch(chang1){case 1:strcpy(packet_filter,t0);break;case 2:strcpy(packet_filter,t1);break;case 3:strcpy(packet_filter,t2);break;case 4:strcpy(packet_filter,t3);break;}/*输入读取时间*/while(time <= 0){printf("\n读取时间(s):");scanf("%d",&time);if(time <= 0){printf("输入有误,请重新输入!!\n");}}4. /* 跳转到已选设备*/for(d=alldevs, i=0; i< inum-1 ; d=d->next, i++);5. /* 打开适配器*/if ((adhandle= pcap_open(d->name, // 设备名65536, // 要捕捉的数据包的部分// 65535保证能捕获到不同数据链路层上的每个数据包的全部内容PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式1000, // 读取超时时间NULL, // 远程机器验证errbuf // 错误缓冲池)) == NULL){fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n",d->name);/* 释放设备列表*/pcap_freealldevs(alldevs);return -1;}6./* 检查数据链路层,为了简单,我们只考虑以太网 */if(pcap_datalink(adhandle) != DLT_EN10MB){fprintf(stderr,"\nThis program works only on Ethernet networks.\n");/* 释放设备列表 */return -1;}7. /* 检查数据链路层,为了简单,我们只考虑以太网 */if(pcap_datalink(adhandle) != DLT_EN10MB){fprintf(stderr,"\nThis program works only on Ethernet networks.\n");/* 释放设备列表 */pcap_freealldevs(alldevs);return -1;}/*dump文件,打开指定文件存储捕获的数据包:*/dumpfp = pcap_dump_open(adhandle, "Output");if( dumpfp == NULL) {printf("Error on opening output file\n");exit(-1);}if(d->addresses != NULL)/* 获得接口第一个地址的掩码 */netmask=((struct sockaddr_in*)(d->addresses->netmask))->sin_addr.S_un.S_addr;else/* 如果接口没有地址,那么我们假设一个C类的掩码 */netmask=0xffffff;//编译过滤器if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask)<0 ){fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");/* 释放设备列表 */pcap_freealldevs(alldevs);return -1;}//设置过滤器if (pcap_setfilter(adhandle, &fcode)<0){fprintf(stderr,"\nError setting the filter.\n");/* 释放设备列表 */return -1;}printf("\nlistening on %s...\n", d->description);/* 释放设备列表 */pcap_freealldevs(alldevs);8. /*设置抓取时间*/pthread_t time_pt;argument time_c;time_c.adhandle = adhandle;time_c.time = time * 1000;if(pthread_create(&time_pt,NULL,crawl_time,&time_c) != 0){ fprintf(stderr,"\n pthread_create is error.\n");return -1;}printf("\n正在写入文件...\n");/* 开始捕捉并存储dump文件*/pcap_loop(adhandle, 0, packet_handler_mac,dumpfp);/*关闭设备*/pcap_close(adhandle);printf("文件已写入!\n");fclose(file_out);结果如下:9.pcap_t *fp;//文件指针int res;if ( pcap_createsrcstr(source, // 源字符串PCAP_SRC_FILE, // 我们要打开的文件NULL, // 远程主机NULL, // 远程主机端口"Output", // 我们要打开的文件名errbuf // 错误缓冲区) != 0){fprintf(stderr,"\nError creating a source string\n");return -1;}/* 打开捕获文件*/if ( (fp= pcap_open(source, // 设备名65536, // 要捕捉的数据包的部分// 65535保证能捕获到不同数据链路层上的每个数据包的全部内容PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式1000, // 读取超时时间NULL, // 远程机器验证errbuf // 错误缓冲池) ) == NULL){fprintf(stderr,"\nUnable to open the file %s.\n", source);return -1;}HashTable Htcp;//基于TCP协议的哈希链表InitHashTable(&Htcp);//进行初始化HashTable Hudp;//基于UDP协议的哈希链表InitHashTable(&Hudp);//进行初始化FILE *data_out = fopen("dataout.txt","w+");/* 从文件获取数据包*/while((res = pcap_next_ex(fp, &header, &pkt_data)) >= 0){packages_number++;int tcp_s = 0;int udp_s = 0;struct ip_header *ih0;ih0 = (struct ip_header *)(pkt_data + 14);int ip_len = ih0->ihl * 4;struct tcp_header *th0;th0 = (struct tcp_header *)(pkt_data + 14 + ip_len);struct udp_header *uh0;uh0 = (struct udp_header *)(pkt_data + 14 + ip_len);data_amount += ih0->tlen;if (ih0->proto == 17)/*UDP协议*/{udp_data_amount += ih0->tlen;udp_packages_number++;int sum = inet_addr(inet_ntoa(ih0->saddr));udp_s = InsertHashTable(&Hudp, ih0->saddr, ih0->daddr,uh0->sport,uh0->dport,sum);fprintf(data_out," 这是第%d个数据包",packages_number);fprintf(data_out," 该数据包为UDP协议:\n");fprintf(data_out," 源IP地址:%s\n", inet_ntoa(ih0->saddr));fprintf(data_out," 目的地址:%s\n", inet_ntoa(ih0->daddr));fprintf(data_out," 源端口:%d\n", uh0->sport);fprintf(data_out," 目的端口:%d\n", uh0->dport);if(strcmp(inet_ntoa(ih0->saddr),local_ip) == 0){fprintf(data_out," 目的地址与本地地址对比,判断为上传数据包\n");upload_udp_data_amount += ih0->tlen;upload_udp_packages_number++;}else{fprintf(data_out," 目的地址与本地地址对比,判断为下载数据包\n");download_udp_data_amount += ih0->tlen;download_udp_packages_number++;}fprintf(data_out,"+++++++++++++++++++++++++++++++++++++++++++++\n\n");}else{if (ih0->proto == 6)/*TCP协议*/{tcp_data_amount += ih0->tlen;tcp_packages_number++;int sum = inet_addr(inet_ntoa(ih0->saddr));tcp_s = InsertHashTable(&Htcp, ih0->saddr, ih0->daddr,th0->sport,th0->dport, sum);fprintf(data_out," 这是第%d个数据包",packages_number);fprintf(data_out," 该数据包为TCP协议:\n");fprintf(data_out," 源IP地址:%s\n", inet_ntoa(ih0->saddr));fprintf(data_out," 目的地址:%s\n", inet_ntoa(ih0->daddr));fprintf(data_out," 源端口:%d\n", th0->sport);fprintf(data_out," 目的端口:%d\n", th0->dport);if(strcmp(inet_ntoa(ih0->saddr),local_ip) == 0){fprintf(data_out," 目的地址与本地地址对比,判断为上传数据包\n\n");upload_tcp_data_amount += ih0->tlen;upload_tcp_packages_number++;}else{fprintf(data_out," 目的地址与本地地址对比,判断为下载数据包\n");download_tcp_data_amount += ih0->tlen;download_tcp_packages_number++;}fprintf(data_out,"++++++++++++++++++++++++++++++++++++++++++++\n");}}}if (res == -1){printf("Error reading the packets: %s\n", pcap_geterr(fp));}fclose(data_out);printf("\n-----------------统计量-----------------\n");printf(" 数据包总数量: %d\n",packages_number);printf(" tcp包数量: %d\n",tcp_packages_number);printf(" 上传tcp包数量: %d\n",upload_tcp_packages_number);printf(" 下载tcp包数量: %d\n",download_tcp_packages_number);printf(" udp包数量: %d\n",udp_packages_number);printf(" 上传udp包数量: %d\n",upload_udp_packages_number);printf(" 下载udp包数量: %d\n",download_udp_packages_number);printf(" 总数据量: %ld\n",data_amount);printf(" tcp数据量: %ld\n",tcp_data_amount);printf(" 上传tcp数据量: %ld\n",upload_tcp_data_amount);printf(" 下载tcp数据量: %ld\n",download_tcp_data_amount);printf(" udp数据量: %ld\n",udp_data_amount);printf(" 上传udp数据量: %ld\n",upload_udp_data_amount);printf(" 下载udp数据量: %ld\n",download_udp_data_amount);return 0; }截图:五、整理与小结本次实训的最终目标是将捕获的数据包保存到文件中,通过构造哈希表对文件中的数据包进行分流处理,实现数据流量的统计。