第二次寒假作业汇总
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2022OOP/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2022OOP/homework/12442 |
这个作业的目标 | 提供规则集(dataacl1.1)和数据集(dataacl1.n_trace),输出数据集中数据包所最佳匹配的规则位置(即匹配到第几条规则就输出规则编号,从0开始,若匹配不到输出-1,输出格式”数据包信息 匹配规则位置“);数据集和规则集用文件的形式读入,匹配结果以文件的形式输出;通过一个main.c编译的main.exe来执行./main <规则集文件名> <数据集文件名> <可能存在的预加载文件>(例 ./main acl1k acl1k_trace1) 这个命令进行匹配操作,输出匹配结果储存在文件res.txt中;用C/C++语言实现,鼓励用C++来完成;将每个功能模块写成函数(模块化),可以尝试学习运用C++中类的相关知识,提倡将每个模块分成不同的文件,每个函数的功能要明确;可适当学习计算机网络相关知识,加深对规则集、数据集、规则匹配等一些概念的理解; |
作业正文 | 如下 |
其他参考文献 | 百度、Google、知乎、维基百科、博客园等上面一系列文案 |
- 本次作业所需要学习的内容:c++内容、数据集规则集和规则匹配的相关概念、git的使用、c的新函数
- 学习过程:
-
从看不懂到看懂作业(这一步花了很久时间)
查了百度、Google、知乎、博客园;问了很多同学,很感谢他们很耐心的教我知识以及和我讨论,超级感动 -
git的使用:创建库和克隆库
在这之后我想要去确认是否真的在自己的库里面创建新的目录叫做learning,但是我找了很久没有找到我电脑本地目录(把自己的电脑里里外外翻了个遍),最后打开VS code的时候打开文件,惊然发现自己的目录,最后折腾把他设置在了访达的旁栏里。最后成功找到了!我也再也不用担心自己找不到了!
- 了解数据集规则集详细内容
- 规则集:原IP地址、目的IP地址、源端口范围、目的端口范围、协议号(点分十进制)
- 数据集:源IP、目的IP、源端口、目的端口、协议号(十进制)
规则集定义:数据规则定义的集合。
由于规则集是在并行执行框架上使用唯一处理算法来执行的,所以规则集运行的速度要比逐个执行单个规则快得多。而且,由于执行过程中聚合了处理和统计信息,所以在完成单个规则处理后不需要额外的步骤来聚合异常信息。
规则集提供范围更广的统计信息,使您可以从多个角度查看输出,例如哪些记录违反了某些规则组合,哪个组合中的所有规则都被违反等。此额外的详细信息级别使您可以将更正问题的重点同时放在问题记录及所有关联的问题上(而不是零星地对孤立的规则异常做出响应)并寻找问题的模式(从孤立的角度查看规则时可能并不明显)。
创建规则集定义时,添加已经创建并定义的数据规则定义。不能在“规则集”工作空间中修改单个数据规则定义。创建规则集定义之后,将生成规则集。运行规则集时,将同时执行作为规则集一部分的所有数据规则定义,并生成一组全面的分析结果。
使用规则集定义(而不是将所有逻辑包含在单个定义中)时,可以通过多个定义划分逻辑。每个定义可以检查特定的条件。然后可以将所有定义集合在一个规则集定义中。构建要应用于数据的规则逻辑,并将创建的规则定义集合在规则集定义中。
数据规则定义:为其构造规则逻辑的单个数据规则。创建数据规则定义时,可以构造规则逻辑来分析数据。
生成数据规则时,将从每个单个的数据规则定义生成数据规则,然后执行要运行的数据规则,一次运行一个规则。运行规则所依据的数据将通过或未能通过检查。
- 开始构思实现程序框架
对于数据集里的其中一个数据,遍历规则集,自上而下匹配,找到第一个匹配的规则作为最佳匹配,输出它所在位置,停止程序
--->
模块化实现:
(规则集和数据集组成顺序相同,所以只需要分块转化,最后匹配)
- 分块:将输入的五元组数据分为五个参数
- 转化:将数据集的IP地址转化为点分十进制
- 匹配:
1. IP地址匹配
2. 端口匹配
3. 协议号匹配
- 确定结果:若匹配结果都为真,则输出规则序号,为假则输出-1
- 设置函数(模块具体)
参考文献:点分十进制和十进制转化
**关键代码:core.c(点分十进制和十进制转化)**
> 这个对我来说真的是难点了,挣扎了好一波最后还是没憋出来
6.具体其他写的代码在这里,一直存在vs code里面删删改改没发布,请点击这里!!。
-收获:
- 掌握了基本git使用
- 第一次具体使用模块化的思维来解决问题,不得不说将问题分块解决真的能够感受到思路清晰,锻炼了自己的逻辑能力
- 学习了很多c里面新的函数
-遇到的困难:
- 有思路但是代码写不出来,去询问了很多同学,也看了他们的代码,但是自己写的时候就是写不出来,代码还是打少了
- 不会用c++打代码,计划里看的课程没看完
- 没能做出来有点难过
ps:本来录制了学习视频,但是剪辑的时候发现过程乱七八糟的,所以放弃了嘿嘿,做个截屏纪念一下吧!❤️