CICFlowMeter源码分析以及为满足需求而进行的修改

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类型,方便写入文本,当然包括写入标签。可以在该类中写一个子方法用来判断属于哪个标签,当然也可以写死。。

说的比较笼统,要想改造改代码符合自己的要求还要仔细读源码,本文只是在一些关键的点上能够给你以帮助。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值