4 个版本
新 0.1.4 | 2024 年 8 月 18 日 |
---|---|
0.1.3 | 2024 年 5 月 16 日 |
0.1.2 | 2024 年 4 月 19 日 |
0.1.1 | 2024 年 3 月 24 日 |
#1652 在 网络编程
每月 191 次下载
105KB
2K SLoC
RPSLyzer: 解析 RPSL 策略并验证 BGP 路由
RPSLyzer 提供库和示例,用于从互联网路由注册处 (IRRs) 解析路由策略规范语言 (RPSL),并验证来自边界网关协议 (BGP) 表转储的内部路由。解析的重点是路由策略相关的 RPSL 对象和属性,重点是 aut-num
对象。对于验证,我们只需遍历每个 BGP 路由中的 AS-path,并使用路由的上下文解释每个 AS 的 aut-num
对象中的策略。
解析 RPSL 后,我们以一种兼容 JSON 的嵌套 Rust 数据结构的形式暴露中间表示 (IR)。因此,您可以通过序列化的 JSON 访问此 IR。
使用方法
作为用户,您需要安装所需的工具、设置环境,并直接使用 Rust 包 route_verification
。请参阅 ./ARTIFACTS.md
了解我们的数据采集、解析、验证和分析工作流程。注意:./ARTIFACTS.md
仍在进行中(WIP);请参阅 #164。
仓库结构
-
我们在
./rfcs/
中标注与 RPSL 相关的请求评论 (RFCs)。请查阅这些文档以了解我们使用的 RPSL 相关术语和 RPSLyzer 的局限性。 -
位于
./rpsl_lexer/
的 RPSL 词法分析器使用 PyParsing 和 Python,并兼容 PyPy。我们将其作为rpsl-lexer
发布到 PyPI。点击此处查看。rpsl-lexer
将特定的 RPSL 语法(例如mp-import
、mp-export
、<peering>
和<filter>
)解析成抽象语法树(AST)。我们主要通过 UNIX 管道从 Rust 库(route_verification_lex
)调用这个库。我们选择使用 PyParsing 进行标记化,以利用解析表达式语法(PEG)在递归定义的表达式中的强大功能。
-
位于
./route_verification/
的 RPSL 解析器、验证逻辑和交互式命令行脚本示例是一系列 Rust 插件(Rust 包)和脚本。所有主要库插件都在route_verification
插件 中重新导出。所有重新导出的插件都在其路径名前加上
route_verification_
。在这些插件中route_verification_ir
定义了 IR 及相关过程。route_verification_lex
将 RPSL 源代码解析成 AST。它需要设置rpsl-lexer
进行标记化(参见上文)。route_verification_parse
将 RPSL 源代码解析成 IR。它利用route_verification_lex
进行标记化,然后将 AST 解析成 IR。route_verification_irr
从 IRR 解析 RPSL 源代码并将其合并成单个 IR。route_verification_as_rel
解析应用互联网数据分析中心(CAIDA)的 AS-relationship 数据集 以增强验证。route_verification_bgp
优化 IR 以进行查询,并验证 BGP 路由与 IR。它可以选择性地合并来自 AS-relationship 数据集的信息(通过伪as-set
),并在验证期间应用这些关系中的特殊情况。
此外,
route_verification
提供了一个命令行界面(CLI),用于解析 IRR 并进行测试验证。交互式脚本位于./route_verification/src/evcxr_examples.rs
模块中。route_verification_rib_stats
是一个主要脚本,用于生成目录中所有 BGP 表转储的统计信息,包括 AS、AS 对和路由级别。我们选择 Rust 来编写 IR、解析器和验证逻辑,因为 Rust 的强类型
enum
转化和在 CPU 密集型任务中的令人满意的性能。 -
我们用于分析和可视化结果的脚本位于
./scripts/
,作为这些任务的示例。其中大多数是 Python 编写的,并利用了常见的 Python 数据分析库,尽管有一个 CPU 密集型脚本是用 Rust 编写的。 -
./ARTIFACTS.md
和./ALIASES.md
解释了如何运行这些脚本以及常见变量名的含义。这些文档仍在进行中;请参阅 #164。
除了代码和简短的文档外,该仓库的 问题 还包含有关此项目的详细讨论和开发记录。如果您遇到问题,我们建议使用 GitHub 的搜索来查找相关信息。
构建工具
我们在各个地方利用了用户友好、可重复和自动化的构建工具。所有 Rust 插件都使用 Cargo,Python 库和脚本使用 Rye。有关更多信息,请参阅 ./ARTIFACTS.md
。
Rust 调试
-
启用日志记录
export RUST_LOG=route_verification=trace
-
在错误消息中启用回溯(堆栈跟踪)
export RUST_BACKTRACE=1
测试
请参阅GitHub Actions在.github/workflows/
的最新测试。
维护状态
维护模式。我们不再积极开发此项目。只有bug修复的贡献将被考虑。请fork并按需修改。
论文
这是与论文RPSLyzer:互联网路由注册表中策略的表征和验证相对应的代码和Issue仓库。该论文被ACM IMC'24接受。我们正在制作最终版本,并将在此处链接预印本。
依赖关系
~14–23MB
~382K SLoC