当前位置:网站首页>CICFlowMeter源码分析以及为满足需求而进行的修改
CICFlowMeter源码分析以及为满足需求而进行的修改
2022-06-24 09:32:00 【zjt597778912】
CICFlowMeter
- CICFlowMeter是一个流量数据处理程序,能够捕获网卡流量或者对pcap流量数据包进行分析。具体将流量数据处理成什么样子请自行百度,下面主要写一下这几天对该程序代码的解析。
- 从网上下载好代码其结构如下图所示

- 其中App和Cmd分别是窗口界面和命令行模式的入口函数。
思路是通过App一步一步找到需要改动的地方进行改动
- 找到调用的方法的类就是ctrl+鼠标左键,不再赘述。
- 调用流程如下A—>B表示A调用了B,或类A中使用了类B
- App—>MainFrame—>FlowOfflinePane,该调用流程对应窗口模式如下图所示:

- 在FlowOfflinePane类中找到“OK”关键字,可以看到该按钮绑定了startReadPcap()函数。
- 在startReadPcap()函数中可以找到worker.execute()语句,而worker是一个ReadPcapFileWorker对象。
- 并且为worker对象绑定了addPropertyChangeListener监听器。其中该监听器中最后一个else if语句如下图所示:

- 图中红色框就是利用子线程进行文件的写操作,即将分析后的数据写入到文件中,由于使用子线程写会导致流量数据乱序,我的需求要求顺序不能乱,所以没有使用该子线程。如果对顺序没有要求可以对其中的代码进行修改以输出你所期望的数据。
在ReadPcapFileWorker类中有一个doInBackground()的重载函数,根据方法名可以知道该方法会在后台自动调用,可能就是在执行了execute()函数会自动调用吧
- 在doInBackground方法中会执行readPcapDir()方法或readPcapFile()方法,而readPcapDir()方法内部也会调用readPcapFile()方法,所以如果要修改只需修改readPcapFile()方法即可。
- 主要说readPcapFile()方法

- 在readPcapFile方法中可以找到上图中红框内的语句,FlowGenerator对象就是一个Flow生成器,给他一个监听器就可以调用到刚刚所说的存储数据子线程了。下面还会有介绍

- 上图是readPcapFile方法中的主逻辑循环,红框是不断读取输入数据包中的一条流量数据并提取信息给basicPcaket对象。绿框中就是对该数据包的处理。黄色框中的代码是我自己添加的代码以防止flowGen对象中finishedFlow字典过多导致内存爆炸。。至于finishedFlow是啥之后会有介绍
- 先看nextPacket()方法,该方法在BasicPacketInfo类中,其代码如下:

- 可以看到绿色框框是提取数据包信息的主要方法,可在其中进行修改以提取自己想要的信息。不再赘述
- flowGen.addPacket(basicPacket);该方法是数据包处理的主要方法,其中主要对flowGen对象中的两个个成员:currentFlows,finishedFlows进行了修改,有三个判断可以自己看,人家也有注释,
- finishedFlows是临时用来存储处理好的Flow的。
- currentFlows是存储尚未结束的对话Flow的。
- 其中调用了flow.addPacket(packet);用来更新Flow。
- mListener.onFlowGenerated(flow);用来通知上面说的子线程进行数据存储。
回到readPcapFile方法,在主逻辑代码之后是如下所示的代码

上述代码中绿框内是源代码自己调用的,我给注释了,自己写了红框中的方法代码进行数据存储。
至于给Flow打标签是在BasicFlow中进行的,在进行存储时会调用该类的dumpFlowBasedFeaturesEx()方法,该方法就是将数据进行进行整合成为一个String类型,方便写入文本,当然包括写入标签。可以在该类中写一个子方法用来判断属于哪个标签,当然也可以写死。。
说的比较笼统,要想改造改代码符合自己的要求还要仔细读源码,本文只是在一些关键的点上能够给你以帮助。
边栏推荐
- Baidu AI template for knowledge understanding
- Ora-28000 error after upgrading Oracle 12C to 19C
- 零基础自学SQL课程 | SQL语句语法顺序与执行顺序
- 顶刊TPAMI 2022!基于不同数据模态的行为识别:最新综述
- In depth analysis of Apache bookkeeper series: Part 3 - reading principle
- 记录一下MySql update会锁定哪些范围的数据
- linux下oracle服务器打开允许远程连接
- Zero foundation self-study SQL course | having clause
- Implementation of simple floating frame in WindowManager
- 二十、处理器调度(RR时间片轮转,MLFQ多级反馈队列,CFS完全公平调度器,优先级翻转;多处理器调度)
猜你喜欢

Thinkphp5 multi language switching project practice

零基础自学SQL课程 | 子查询

In depth study paper reading target detection (VII) Chinese English Bilingual Edition: yolov4 optimal speed and accuracy of object detection

Oracle 12c升级至19c后ORA-28000错误

LeetCode: 240. Search 2D matrix II

文献调研报告

How to make social media the driving force of cross-border e-commerce? This independent station tool cannot be missed!

最新Windows下Go语言开发环境搭建+GoLand配置

Summary of medical image open source datasets (II)

Servlet fast foundation building
随机推荐
[bug] @jsonformat has a problem that the date is less than one day when it is used
顶刊TPAMI 2022!基于不同数据模态的行为识别:最新综述
Literature Research Report
Leetcode -- linked list
In depth study paper reading target detection (VII) Chinese English Bilingual Edition: yolov4 optimal speed and accuracy of object detection
Prct-1400: failed to execute getcrshome resolution
每周推薦短視頻:談論“元宇宙”要有嚴肅認真的態度
五心红娘
grpc本地测试联调工具BloomRPC
Seekbar with text: customize progressdrawable/thumb: solve incomplete display
Endgame P.O.O
如何解决独立站多渠道客户沟通难题?这款跨境电商插件一定要知道!
【自定义Endpoint 及实现原理】
Vidéo courte recommandée chaque semaine: Soyez sérieux en parlant de "métaunivers"
【Eureka 源码分析】
Talking about the knowledge of digital transformation
5 minutes, excellent customer service chat handling skills
Thinkphp5 multi language switching project practice
Target of cmake command_ compile_ options
Oracle数据文件头SCN不一致处理方法