3个不稳定版本
新功能 0.2.1 | 2024年8月18日 |
---|---|
0.2.0 | 2024年5月16日 |
0.1.0 | 2023年11月6日 |
#10 在 #irr
27KB
322 行
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](http://pypi.ac.cn/project/rpsl-lexer/)rpsl-lexer
将特定的RPSL语法(如mp-import
、mp-export
以及它们包含的<peering>
和<filter>
部分)解析成抽象语法树(AST)。我们主要通过UNIX管道从解析RPSL的Rust库(route_verification_lex
)调用这个库。我们选择使用PyParsing进行标记化,以利用解析表达式语法(PEG)对递归定义的表达式的强大功能。
-
位于
./route_verification/
的RPSL解析器、验证逻辑和REPL外壳脚本示例是一系列Rust crate(Rust包)和脚本。所有主要库crate都通过route_verification
crate重新导出。所有重新导出的crate都将在其路径名前加上
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关系数据集以增强验证。route_verification_bgp
对IR进行优化,并验证BGP路由与IR。它可以选择合并来自AS关系数据集(通过伪as-set
)的信息,并在验证过程中根据这些关系应用特殊案例。
此外,
route_verification
提供了一个命令行界面(CLI),用于解析IRR和测试运行验证。REPL脚本位于模块./route_verification/src/evcxr_examples.rs
中。route_verification_rib_stats
是生成目录中所有BGP表转储的统计信息的主脚本。我们选择Rust来编写IR、解析器和验证逻辑,因为它的强类型枚举和满足CPU密集型任务的性能。
-
我们用于在
./scripts/
中分析和可视化结果的脚本可作为这些任务的示例。其中大多数是用Python编写的,并利用了常见的Python数据分析库,尽管其中一个CPU密集型脚本是用Rust编写的。 -
./ARTIFACTS.md
和./ALIASES.md
解释了如何运行脚本和常见变量名的含义。这些文档仍然是工作进展中;请参阅#164。
除了代码和简短文档外,这个仓库的问题还包含了关于此项目的详细讨论和开发记录。如果您遇到问题,我们建议使用GitHub的搜索来查找相关信息。
构建工具
我们到处都使用了用户友好、可重复和自动的构建工具。所有Rust crate都使用Cargo,Python库和脚本使用Rye。更多信息请参阅./ARTIFACTS.md
。
Rust调试
-
启用日志记录
export RUST_LOG=route_verification=trace
-
在错误信息中启用堆栈跟踪
export RUST_BACKTRACE=1
测试
请参阅GitHub Actions中的最新测试,地址为:.github/workflows/
。
维护状态
维护模式。我们目前没有积极开发此项目。只考虑bug修复的贡献。请分叉并按需修改。
论文
这是对应于论文《RPSLyzer:互联网路由注册库中策略的表征和验证》的代码和Issue仓库。该论文被ACM IMC'24接受。我们正在制作最终版本,并将在此处链接预印本。
依赖项
约3-4.5MB
约79K SLoC