当前位置:网站首页>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类型,方便写入文本,当然包括写入标签。可以在该类中写一个子方法用来判断属于哪个标签,当然也可以写死。。
说的比较笼统,要想改造改代码符合自己的要求还要仔细读源码,本文只是在一些关键的点上能够给你以帮助。
边栏推荐
猜你喜欢

关于thinkphp5 使用模型save()更新数据提示 method not exist:think\db\Query-> 报错解决方案

Why is LNX of e equal to X

ApplicationContextInitializer的三种使用方法

tp5 使用post接收数组数据时报variable type error: array错误的解决方法

如何解决独立站多渠道客户沟通难题?这款跨境电商插件一定要知道!

二十、处理器调度(RR时间片轮转,MLFQ多级反馈队列,CFS完全公平调度器,优先级翻转;多处理器调度)

Amazing tips for using live chat to drive business sales

如何管理海量的网络基础设施?

5分钟,客服聊天处理技巧,炉火纯青

零基础自学SQL课程 | HAVING子句
随机推荐
生产者/消费者模型
获取带参数的微信小程序二维码-以及修改二维码LOGO源码分享
PostgreSQL
Nlp-d59-nlp game D28 - I think it's OK - stage summary - mentality adjustment
顶刊TPAMI 2022!基于不同数据模态的行为识别:最新综述
198. house raiding
数字化转型的失败原因及成功之道
【Eureka注册中心】
[custom endpoint and implementation principle]
Baidu AI template for knowledge understanding
ThinkPHP 5.0 模型关联详解
Oracle database listening file configuration
In depth analysis of Apache bookkeeper series: Part 3 - reading principle
Seekbar with text: customize progressdrawable/thumb: solve incomplete display
LeetCode: 137. Number II that appears only once
从618看京东即时零售的野心
算法---矩阵中战斗力最弱的 K 行(Kotlin)
如何提高网络基础设施排障效率,告别数据断档?
编程题(持续更新)
零基础自学SQL课程 | HAVING子句