# 网络流量分析软件
## 一、选题背景
一台计算机,不管是个人电脑还是服务器,每时每刻都会有大量的网络数据包通过网卡发出或接收,对一般用户这些数据是透明的,因为网络传输是在后台默默进行的,一般用户很难对这些数据进行感知和分析。
如果能设计一种软件,能够实时监控这些数据,并且能根据用户需求图形化的展示给用户,就能大大提高网络传输的可见性和可分析性。
网络上已经有如 Wireshark 之类的抓包工具,但是它们有些对操作系统和网络环境有特定要求,有些操作难度过于复杂。尤其值得注意的是对于本身没有图形界面的操作系统或者目标机位于远程位置,一般只能在目标机上获取大量数据保存为文件,下载到有图形界面的操作系统进行分析,便携性较差,且难以做到实时监控。
针对这样的问题,本次课程设计希望能设计一种能够跨平台的网络流量实时监控、分析软件,使用 Java 语言进行后台开发,而 UI 展示则使用 Web 客户端的形式。之所以选择 Web 方式展示,主要是针对没有图形界面的操作系统或目标机处于远程位置的情况,可以通过互联网将数据发至用户浏览器进行展示和分析。当然,考虑到网络环境的复杂性,任务中必须要考虑数据传输的安全性和系统运行的稳定性。
## 二、方案论证(设计理念)
### 程序后台(数据模块)
(1)数据抓取:pcap4j 库
Pcap4J 是一款十分优秀的数据报文抓取第三方 Java 库,要自己编写报文抓取代码是十分困难的,但是在这个第三方库的支持下,对数据报文的抓取和处理将会容易,大大降低了开发难度。尽管如此,这一部分也将是程序的核心,报文的获取、转换、存储、读取都将在这个部分完成。
(2)Web 框架:Jetty 库
本程序虽然以 Web 作为主要展示端和控制端,但 Web 后台并不是核心所在,所以只需要简单轻量的内嵌式 Web 后台就足够了,Jetty 便是非常适合的库,能比较容易的实现 Web 后台。其中文件上传下载使用 servlet,其他数据交互使用 WebSocket。
(3)WebSocket 交互逻辑
WebSocket 属于 Web 的一部分,是前端获取数据的主要来源,它将是整个程序中最复杂的模块之一,除了负责后端报文的转发和接收前端控制命令外,还需要检测用户的合法性,以及将用户的合法请求信息转换为可识别的控制信息。
(4)认证与加密
程序启动时生成随机 256 位密钥,浏览器的认证与加密将依赖这个密钥。浏览器获取密钥之后,建立 WebSocket 连接和调用后台 API 都将使用这个密钥进行认证和加密。
为确保密钥不会在传输过程中被窃听,使用浏览器地址#hash 作为密钥的来源,这样密钥将不会通过浏览器传输,自然就没有被网络窃听的可能。值得注意的是,在设计的初期是使用 HTTPS 协议进行认证和加密的,但在开放过程中意识到,SSL 只提供传输的保密性,却并不会提供用户认证的
功能,虽然能够较好地防止信息被窃听,却无法保证用户是合法用户。所以后期加上了 AES 加密,将与 HTTPS 同时存在,并在程序入口处加上
了灵活的控制,文档后面会有详细的说明。
### 程序前端(展示模块)
(1)展示页面:单页面入口,使用 React 实现,进入 React 前统一从 URL 中获取密钥并保存在 sessionStorage 中(这样刷新浏览器也能继续完成认证,且在浏览器或标签关闭时失效)
(2)控制接口:WebSocket 接口
(3)数据获取接口:WebSocket 接口
(4)文件接口:上传与下载均使用 servlet
### 数据分析与存储
(1)文件存取:原生 tcpdump 标准 pcap 文件
Pcap4J 库可以直接存取 tcpdump 标准 pcap 文件。
(2)大量数据与性能:分页与动态读取当数据量很大时,在一个页面显示会严重影响性能,甚至程序崩溃,必须做好分页。然而分页也需要一定的技巧,由于 pcap 文件本身是流式的,而且没有索引,所以很难从一个大的 pcap 文件中分页,只能采用多个文件的方式,借用操作系统的文件管理来辅助分页,规定一个文件最大存多少个包,这样就解决了后台分页问题。
还有就是前端的数据,除了能实时监控数据包之外,还应能够获取历史数据,另外当数据包越积越多,前端的内存消耗会越来越大,即使前端分页也无法缓解内存负荷,必须在合适的时间舍弃旧的数据包,需要的时候再向后台请求获取。
(3)数据分析:独立模块
本程序的数据分析主要有两种形式:一是从开始捕获数据包开始动态统计数据包类型,加以分析;二是从一个 pcap 文件中读取并分析。
这两种分析方式的分析过程是一样的,但是数据来源不同,如果能将分析程序独立出来,就能从不同的来源获取数据后使用统一的接口。另外,动态分析将是一直存在与全局空间的,只有一个,而文件分析则对应每一个文件,可以有多个。
从连接上看,两种连接都应该支持多客户端,不同之处只是实时捕获是多个客户端控制同一个捕获程序,而文件管理部分则是每个客户端对应一个文件管理程序。
## 三、过程论述
1.总体架构与引用第三方库按运行环境分为前端和后台,按程序模块分为实时捕获和文件管理,按前后端连接方式分为 servlet 和 WebSocket。
前端使用 React[1]脚手架[2]构建,使用了 AntDesign[3]来组建基本的页面元素,图表绘制使用了 AntDesignPro[4]。另外,前端的加解密使用了 crypto-js[5]。
后台使用 jetty[6]作为 Web 库与前端交互,使用 pcap4j[7]作为数据报文捕获与处理工具,使用 Gson[8]作为 JSON 格式处理工具,使用 slf4j[9]作为日志系统,另外还用到了 Apache 的开源库 commons-fileupload[10]来处理文件的上传。
程序使用 gradle[11]构建,使用 bootJar[12]组织依赖并打包成 jar。2.定义前后端交互接口
有如下三种类型的消息:
①action=hello 握手消息
### 客户端-> 服务器
每当新的连接建立时,会首先有三次握手,成功握手并建立互信关系后才能进行后续消息传输。
第一次握手:由服务器发给客户端,action=hello 并附带随机字符串 seed 和用 AES 密钥加密 seed 后的 cipher。客户端可以用本地密钥对 seed 进行加密并与 cipher 进行比较来确认本地的密钥是否正确,如正确则进行第二次握手,否则断开连接并提示用户密钥错误。
第二次握手:由客户端发给服务器,action=hello 并附带用客户端密钥对第一次握手时收到的 seed 的哈希值进行加密后的密文,同时附带客户端身份(实时捕获还是文件管理)。服务器同样用服务器密钥对 seed 的哈希进行加密与收到的密文比较,并进行第三次握手。
第三次握手:由服务器发给客户端,action=verify 并附带验证结果。如果第二次握手中验证通过则发送成功通知,否则发送失败通知。验证失败后客户端会主动关闭连接。
②action=ping 存活确认消息
当接收到客户端的 ping 消息后,服务器会回复一个 action=pong 的空消息来确认服务器的存活状态。
③action=command 控制命令消息控制消息有三类,捕获模块消息、文件模块消息、通用消息。
捕获模块消息:
list_interfaces:列出网卡列表
capture_status:获取当前的捕获状态
start_capture:开始实时捕获
stop_capture:结束捕获文件模块消息:
list_fil
没有合适的资源?快使用搜索试试~ 我知道了~
基于Java实现网络流量分析软件【100010394】

共77个文件
java:27个
js:15个
jsx:9个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉

详情介绍:https://blog.csdn.net/s1t16/article/details/129174853 本次课程设计希望能设计一种能够跨平台的网络流量实时监控、分析软件,使用 Java 语言进行后台开发,而 UI 展示则使用 Web 客户端的形式。之所以选择 Web 方式展示,主要是针对没有图形界面的操作系统或目标机处于远程位置的情况,可以通过互联网将数据发至用户浏览器进行展示和分析。当然,考虑到网络环境的复杂性,任务中必须要考虑数据传输的安全性和系统运行的稳定性。
资源推荐
资源详情
资源评论
























收起资源包目录














































































































共 77 条
- 1
资源评论

- gg_0000_gg2023-03-10资源有很好的参考价值,总算找到了自己需要的资源啦。
- m0_586010562023-03-06果断支持这个资源,资源解决了当前遇到的问题,给了新的灵感,感谢分享~
神仙别闹
- 粉丝: 2004
- 资源: 5450

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- 第4次作业_计算税后工资.cpp
- 校园管理 - 学生管理系统源码
- 1047538782469312MOJiRead_channel_google_code_1.5.5_60_20230314182834_NO-HW_release.apk
- stm32的nucleo开发板点亮LED的汇编程序
- WPSOffice-v17.3.2(1394)-v8a,v7a-Balatan.apk
- python练习题代码参考-职工管理系统
- python读取某文件夹下的所有文件名将读出的文件名输出到CSV文件
- Sparse_Identification_Part2.mlx
- python斐波那契数列
- python非递归方式计算阶乘(循环)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
