#plugin #pcap #监听器 #数据包分析器 #cli

app 监听器cli

一个用于通过插件捕获和分析数据包的命令行工具

1 个不稳定版本

0.1.0 2021年4月14日

#2#数据包分析器

GPL-3.0-only

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... 
    }
}

官方插件列表

PCAP解析器

社区插件精选列表

这很令人遗憾

依赖关系

~18MB
~324K SLoC