1 个不稳定版本
0.1.0 | 2021年4月14日 |
---|
#2 在 #数据包分析器
26KB
393 行
监听器
一个具有分析器插件系统的数据包嗅探和分析工具。
路线图
您可以在此处找到官方插件路线图。
框架路线图可以在此处找到。
插件
监听器通过插件进行数据包分析。
使用Diesel的示例插件
示例代码(不含注释)可以在此处找到。
以下使用语句是插件所需的,以及使用Diesel的基本功能。
use dotenv::dotenv;
use abi_stable::{export_root_module, prefix_type::PrefixTypeTrait, rvec, sabi_extern_fn, sabi_trait::prelude::TU_Opaque, std_types::{RString, RVec}};
use eframework::{analysis_framework::{AnalysisModule, AnalysisModuleBox, AnalysisModule_TO, Dependency, ModuleInfo, Plugin, Plugin_Ref}, rversion::RVersion, rversion_req::RVersionReq};
use diesel::{Connection, RunQueryDsl, pg::PgConnection};
此语句将Diesel的/migrations
目录直接嵌入到您的插件中。这对于保持插件的便携性和可通过二进制文件或从crates.io下载是必要的。
embed_migrations!();//Embed our Diesel migrations into this crate so we can run them upon beginning analysis later.
这个小片段允许监听器命令行工具从编译的库中加载插件。这里唯一需要自定义的地方就是将结构体的名称更改为您插件更适合的名称。请记住在示例插件的其余部分更改名称。
#[export_root_module]
pub fn get_library() -> Plugin_Ref {
Plugin {
get_analyzer,
}.leak_into_prefix()
}
#[sabi_extern_fn]
pub fn get_analyzer() -> AnalysisModuleBox {
AnalysisModule_TO::from_value(ExampleModule {}, TU_Opaque)
}
pub struct ExampleModule { }
在这里,我们实现了AnalysisModule trait,这使我们的插件可以在分析过程中被调用。第一个函数get_info
使监听器能够收集有关您插件的名称、版本和依赖信息。第二个函数analyze
是在轮到您的插件执行分析时调用的。
impl AnalysisModule for ExampleModule {
fn get_info(&self) -> eframework::analysis_framework::ModuleInfo {
return ModuleInfo {
name: RString::from("ExamplePluginName"),
version: RVersion::new(0, 1, 0),
dependencies: rvec![
Dependency
{
name: RString::from("PCapParser"), //Base plugin for most if not all plugins.
version_requirement: RVersionReq {
minimum_version: RVersion::new(0, 1, 0),
maximum_version: RVersion::new(1, 0, 0)
}
}
]
}
}
fn analyze(&self, pcap_input_directory: &RString, connection_string: &RString) {
println!("Starting the example plugin!");
dotenv().ok();
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
let connection: PgConnection = PgConnection::establish(&connection_string)
.expect(&format!("Error connecting to {}", database_url));
//Run our embedded Diesel migrations
let migration_result = embedded_migrations::run(&connection);
if migration_result.is_err() {
println!("An error occurred while running migrations: {}", migration_result.err().unwrap());
return;
}
//Do some packet analysis...
}
}
官方插件列表
社区插件精选列表
这很令人遗憾
依赖关系
~18MB
~324K SLoC