4 个版本
新 0.2.2 | 2024 年 8 月 18 日 |
---|---|
0.2.1 | 2024 年 5 月 16 日 |
0.2.0 | 2024 年 3 月 10 日 |
0.1.0 | 2023 年 11 月 6 日 |
#5 在 #irr
每月 26 次下载
在 6 个包(直接使用 4 个) 中使用
59KB
717 行
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 相关的请求评论(RFC)。请查阅这些文件,了解我们使用的 RPSL 相关术语以及 RPSLyzer 的局限性。 -
./rpsl_lexer/
中的 RPSL 词法分析器使用 PyParsing 和 Python,并与 PyPy 兼容。我们将其发布在 PyPI 上,名为rpsl-lexer
。rpsl-lexer
将特定的RPSL语法(例如mp-import
、mp-export
以及包含<peering>
和<filter>
的部分)转换成抽象语法树(AST)。我们主要通过UNIX管道从Rust库(用于解析RPSL的route_verification_lex
)调用这个库。我们选择使用PyParsing进行标记化,以便利用解析表达式语法(PEG)在递归定义的表达式中的强大功能。
-
位于
./route_verification/
的RPSL解析器、验证逻辑和REPL外壳脚本示例是一系列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并进行验证测试。REPL脚本位于模块./route_verification/src/evcxr_examples.rs
中。route_verification_rib_stats
是生成目录中所有BGP表转储的统计信息的主脚本,包括AS、AS对和路由级别。我们选择Rust来编写IR、解析器和验证逻辑,因为它的强类型枚举(
enum
)和CPU密集型任务的满意性能。 -
我们用于分析和可视化的脚本位于
./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/
中的最新测试。
维护状态
维护模式。我们不是在积极开发这个项目。只有bug修复的贡献将被考虑。请fork并按需修改。
论文
这是对应于论文《RPSLyzer:互联网路由注册库中策略的特性和验证》的代码和Issue仓库。这篇论文已被ACM IMC'24接受。我们正在制作一个最终版本,并将在此处链接预印本。
依赖项
约4–5.5MB
约103K SLoC