1 个不稳定版本
0.1.0 | 2024年5月12日 |
---|
在科学类别中排名137
20KB
363 行
entropyscan-rs
威胁狩猎的熵扫描器。也是一个教学项目。
项目被分为独立的“阶段”进行开发。
阶段 0:MVP
这是最小可行产品,我们实现了熵计算算法,并将其指向一个文件进行计算。非常基础,但这是我们开始的起点。
阶段 1:递归!
现在我们添加了处理整个目录的能力,通过递归收集来自父路径参数的可行目标(真实文件)。我们也开始正确使用 PathBuf
。
阶段 2:最小熵
我们的目标是找到可疑的熵文件,因此能够设置一个最低熵值可能很有用,低于此值的工具不会报告。在这个阶段,这通过位置参数来处理。
此外,现在我们有两个参数,我们包括一个小的 usage()
函数,但这很快就会变得烦人。我想知道在 Rust 中处理 CLI 参数是否有更好的方法...
阶段 3:Clap!
在我们添加更多功能之前,我们需要清理我们的 CLI 选项管理。是时候使用 clap 来简化我们的 CLI 配置了。这构成了一个重大的重建,但长远来看将带来回报。
阶段 4:模块
一个大的飞跃!在这个阶段,我们将代码重构到 main.rs
之外,并放入一个独立的模块。这为轻松添加新功能奠定了基础。
阶段 5:结构体和大量数学
我们希望为扫描器添加一些新功能,但要做到这一点,我们需要更正式地考虑数据。在这个阶段,我们添加了一个 FileEntropy
结构体,帮助我们将有用信息放在一个地方。
但最大的变化是在添加了 stats
模块,该模块添加了关于我们发现文件的统计计算。尽管目前尚未在程序中使用,但将此代码编写下来是这一阶段的一个重大变化。这包括一个 IQR
结构体,帮助我们包含关于异常值四分位距的数据。
阶段 6:子命令
我们在第5阶段为提供扫描目标的统计数据打下了基础:平均和中位熵、方差,甚至是基于IQR方法的异常值。这种输出与标准列表有很大不同,可能需要成为一个独立的命令。幸运的是,我们已实现了Clap,因此重构为子命令将会相对容易。我们将需要编写代码来打印这些统计数据,但这并不困难,因为我们有很好的清洁函数。
第7阶段:用户体验
我们已经添加了所有真正想要的功能,现在我们可以考虑让用户界面更美观。特别是,如果输出不仅仅是制表符分隔的字段将会很棒。让我们将默认输出设置为漂亮的视觉表格。为了实现这一点,我们将添加另一个依赖项:名为tabled的库。
第8阶段:格式
我们最后的一项任务是给用户提供一些输出选项。默认表格很好,但我们可能还想让数据在其他工具中使用。为此,我们将提供另外两种选项:CSV和JSON输出,通过-f
或--format
选项来控制。这将对stats
和scan
子命令都可用。
这引入了一个非常有价值的库:serde-json
,可以直接将我们的结构体转换为JSON。
第9阶段:完善细节
我们已经完成了所有功能!剩下的是从效率和风格的角度审查我们的代码,以进行清理。
最好的改进之一是移除了那些令人讨厌的clone()
调用,改为使用引用。当我们不需要传递整个结构体时,就不应该这样做!
依赖项
约3-4MB
约76K SLoC