#cef #serde #serialization #devices #header #key-value #pair

nightly serde_cef

使用serde进行CEF序列化

1个不稳定版本

0.1.0 2019年6月26日

#11#cef

BSD-3-Clause

24KB
378 代码行

serde_cef

Build Status Latest version Documentation License

CEF是一种可扩展的、基于文本的格式,通过提供最相关的信息来支持多种设备类型。消息语法简化以与ESM规范化一起使用。具体来说,CEF定义了一种日志记录的语法,由一个标准头部和一个可变扩展组成,格式为键值对。

Sep 19 08:26:10 host CEF:0|Security|threatmanager|1.0|100|worm successfully stopped|10|src=10.0.0.1 dst=2.1.2.2 spt=1232

快速入门

您可以通过将其添加到您的Cargo.toml中开始使用它。

[dependencies]
serde_derive = "1.0"
serde_cef = "0.1"

然后,创建一个结构,实现serde::Serialize / serde::Deserialize特性,并将该结构用作serde_cef::CefRecord的扩展。

extern crate serde_cef;
#[macro_use]
extern crate serde_derive;

use serde_cef::{CefRecord, CefSeverity, CefSignatureId,to_string, from_str};

#[derive(Serialize, Deserialize, Clone, Debug)]
struct Foo {
    a: String,
    b: u64,
}

fn main() {
    let rec = CefRecord {
        headers: None,
        version: 0,
        device_vendor: "Fake".to_string(),
        device_product: "Product".to_string(),
        device_version: "0.1".to_string(),
        signature_id: CefSignatureId::U64(0),
        signature: "Nothing".to_string(),
        severity: CefSeverity::U8(6),
        extensions: Foo { a: "subtest".into(), b: 695217 },
    };
    let as_string = to_string(&rec).unwrap();
    println!("{}", &as_string);
    println!("{:?}", from_str::<Foo>(&as_string).unwrap());
}

输出:

CEF:0|Fake|Product|0.1|0|Nothing|6|a:subtest b:695217
CefRecord { headers: None, version: 0, device_vendor: "Fake", device_product: "Product", device_version: "0.1", signature_id: U64(0), signature: "Nothing", severity: U8(6), extensions: Foo { a: "subtest", b: 695217 } }

特性 ovh-ldp

特性 ovh-ldp 允许对字段名称进行后缀处理,以适应LDP命名约定

在您的Cargo.toml中设置

[dependencies]
serde_value_flatten = { version = "0.1", features = ["ovh-ldp"] }

重新运行前面的示例,现在输出将如下所示

CEF:0|Fake|Product|0.1|0|Nothing|6|a:subtest b_double:695217

许可证: BSD-3-Clause

依赖项

~4–6MB
~110K SLoC