#packet #networking #suricata #ipc #pcap #alert #eve

suricata-ipc

将数据包发送到Suricata并接收输出的库

46个版本 (18个不兼容)

0.19.0 2021年3月5日
0.17.0 2020年12月29日
0.15.2 2020年11月30日
0.3.0 2020年7月2日

#4 in #suricata

Download history 7/week @ 2024-03-28 1/week @ 2024-04-04 1131/week @ 2024-06-06 142/week @ 2024-06-13

1,273每月下载量

MIT/Apache

145KB
3.5K SLoC

Rust 2.5K SLoC // 0.0% comments C 559 SLoC // 0.1% comments Shell 172 SLoC // 0.0% comments

suricata-ipc

一个允许与Suricata共享数据包,并从Eve套接字读取警报的库。读取的警报可以使用智能缓存来确定关于它们的额外元数据。

use suricata_ipc::prelude::*;

#[tokio::main]
async fn main() {
    let rules = Rules::from_path("my.rules").expect("Failed to parse rules");
    let config = Config::default();
    let rules = Rules::from_path(resources.join("test.rules")).expect("Could not parse rules");
    let cache: IntelCache<Rule> = rules.into();
    cache.materialize_rules(config.rule_path.clone()).expect("Failed to materialize rules");

    let mut ids = Ids::new(config).await.expect("Failed to create ids");
    let ids_alerts = ids.take_alerts().expect("No alerts");

    send_packets(&mut ids).await.expect("Failed to send packets");

    let alerts: Result<Vec<_>, Error> = ids_alerts.try_collect().await;
    let alerts: Result<Vec<_>, Error> = alerts.expect("Failed to receive alerts")
        .into_iter().flat_map(|v| v).collect();
    let alerts = alerts.expect("Failed to parse alerts");

    for eve in alerts {
        println!("Eve={:?}", eve);
        if let Some(intel) = cache.observed(eve) {
            if let Observed::Alert { rule, message: _ } = intel {
                println!("Rule={:?}", rule);
            }
        }
    }
}

使用Docker开发

安装lefthook。然后可以运行

lefthook run develop

构建IPC插件

有关说明,请参阅IPC插件README。您需要IPC插件才能使用suricata-ipc。

依赖项

~15–31MB
~459K SLoC