8个版本 (破坏性更新)

0.7.0 2021年9月13日
0.6.0 2020年11月30日
0.5.0 2019年8月5日
0.4.1 2019年1月30日
0.1.0 2018年2月1日

解析器实现中排名2359

Download history 3390/week @ 2024-04-22 4125/week @ 2024-04-29 2255/week @ 2024-05-06 2830/week @ 2024-05-13 3417/week @ 2024-05-20 4134/week @ 2024-05-27 2876/week @ 2024-06-03 2225/week @ 2024-06-10 2656/week @ 2024-06-17 2477/week @ 2024-06-24 3002/week @ 2024-07-01 2975/week @ 2024-07-08 2582/week @ 2024-07-15 2340/week @ 2024-07-22 3051/week @ 2024-07-29 1941/week @ 2024-08-05

每月下载量10,258
用于suricata

MIT/Apache

68KB
1K SLoC

ipsec-parser

License: MIT Apache License 2.0 Build Status

IPsec解析器

此crate包含用于IPsec的几个解析器:IKEv2和读取ESP封装消息的封装。此解析器提供读取和分析消息的基本功能,但不处理消息的解释。

支持ESP,但仅用于读取有效负载的封装。

支持封装ESP,以区分IKE和ESP头。

IKEv2解析器

一个IKEv2(RFC7296)解析器,使用nom解析器组合框架实现。

代码可在Github上找到,并是Rusticata项目的一部分。

要解析IKE数据包,首先使用parse_ikev2_header读取头部,然后使用头部的类型解析剩余部分

use ipsec_parser::*;
use nom::IResult;

static IKEV2_INIT_RESP: &'static [u8] = include_bytes!("../assets/ike-sa-init-resp.bin");

fn test_ikev2_init_resp() {
    let bytes = IKEV2_INIT_RESP;
    match parse_ikev2_header(&bytes) {
        Ok( (rem, ref hdr) ) => {
            match parse_ikev2_payload_list(rem,hdr.next_payload) {
                Ok( (_, Ok(ref p)) ) => {
                    // p is a list of payloads
                    // first one is always dummy
                    assert!(p.len() > 0);
                    assert_eq!(p[0].content, IkeV2PayloadContent::Dummy);
                    for payload in p {
                        match payload.content {
                            IkeV2PayloadContent::SA(ref sa) => { /* .. */ },
                            _ => ()
                        }
                    }
                },
                e => { eprintln!("Parsing payload failed: {:?}", e); },
            }
        },
        _ => { eprintln!("Parsing header failed"); },
    }
}

更新日志

0.7.0

  • 升级到nom 7
  • 将MSRV设置为1.46

0.6.0

  • 升级到nom 6
  • 将所有基于宏的解析器转换为函数

0.5.0

  • 升级到nom 5

0.4.1

  • 不要在use组中使用glob导入(与rust 1.24兼容)

0.4.0

  • 升级到nom 4

0.3.0

  • 添加函数parse_ikev2_message以读取头部和有效负载列表
  • init_spiresp_spi字段已从&[u8]更改为u64

Rusticata

此解析器是rusticata项目的一部分。该项目旨在提供安全的解析器,可用于其他项目。

解析器的测试是通过手动测试和单元测试以及cargo-fuzz完成的。如果您发现任何问题,请填写错误报告。

请随时贡献:测试、反馈、文档、新解析器的建议(或代码)等。

许可证

以下任一许可证下提供

由您自行选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,都将如上双许可,不附加任何额外条款或条件。

依赖项

约1MB
约19K SLoC