2个版本
新 0.1.1 | 2024年8月18日 |
---|---|
0.1.0 | 2023年11月6日 |
#15 in #irr
53 每月下载量
用于 8 个crate(4直接使用)
10KB
59 行
RPSLyzer: 解析RPSL策略并验证BGP路由
RPSLyzer提供了库和示例,用于从互联网路由注册处(IRRs)解析路由策略规范语言(RPSL),并验证从BGP表转储中提取的域间路由。解析的重点是RPSL对象和与路由策略相关的属性,主要集中在aut-num
对象上。对于验证,我们只是遍历每个BGP路由中的AS路径,并根据路由的上下文解释每个AS的aut-num
对象中的策略。
解析RPSL后,我们以兼容JSON的嵌套Rust数据结构的形式暴露中间表示(IR)。因此,您可以通过序列化的JSON从其他语言访问此IR。
用法
作为用户,您需要安装所需的工具,设置环境,并直接使用route_verification
Rust包。请参阅./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
是一个主要脚本,用于生成目录、AS、AS 对和路由级别的所有 BGP 表转储的统计信息。我们选择 Rust 作为 IR、解析器和验证逻辑的语言,因为它在 CPU 密集型任务中的强类型
enum
递归和令人满意的表现。 -
我们用于分析和可视化的脚本位于
./scripts/
中,这些脚本作为这些任务的示例。其中大部分是用 Python 编写的,并利用了常见的 Python 数据分析库,尽管其中一个 CPU 密集型脚本是用 Rust 编写的。 -
./ARTIFACTS.md
和./ALIASES.md
解释了如何运行脚本以及常见变量名的含义。这些仍然是 WIP;请参阅 #164。
除了代码和简短文档外,该存储库的 问题 还包含有关此项目的详细讨论和开发记录。如果您遇到问题,建议使用 GitHub 的搜索功能查找相关信息。
构建工具
我们在所有地方都利用了用户友好、可重复和自动的构建工具。所有 Rust 包都使用 Cargo,Python 库和脚本使用 Rye。有关更多信息,请参阅 ./ARTIFACTS.md
。
Rust 调试
-
启用日志记录
export RUST_LOG=route_verification=trace
-
在错误消息中启用回溯(堆栈跟踪)
export RUST_BACKTRACE=1
测试
请参阅GitHub Actions中的最新测试,地址为:.github/workflows/
。
维护状态
维护模式。我们目前没有积极开发这个项目。只考虑错误修复的贡献。请根据需要进行分支和修改。
论文
这是对应于论文《RPSLyzer:互联网路由注册表中策略的特性和验证》的代码和问题仓库。该论文被ACM IMC'24接受。我们正在制作一个最终版本,并将在此处链接预印本。
依赖项
~4–6.5MB
~130K SLoC