RTR RFC8210协议在Python中的一个简单客户端实现
rpki-rtr-client的Python项目详细描述
简介
RTR的一个简单的客户端实现 ^Python中的{a1}协议。 查看Cloudflare的博客 RPKI获取更多开源 RPKI代码。在
使用
Cloudflare提供了一个开放的RTR 位于rtr.rpki.cloudflare.com端口8282的服务器基于 Cloudflare的GoRTR开源 RTR服务器。在
用法是通过--help参数。在
^{pr2}$编译Cloudflare open RTR服务器的默认主机名和端口 到源代码中。您可以通过指定自己的主机和端口 命令行-h|--host和-p|--port参数。在
$ rtr_client --host rtr.rpki.cloudflare.com --port 8282 ... ^C $
调试信息的modocom可用于显示序列号 以及接受公告/宽度提取有效ROA的进度。代码 将始终显示序列号的进度加上有效的编号 与该序列号相关联的ROA。在
DUMP ROUTES: serial=133 announce=130401/withdraw=0 NEW SERIAL 0->133
当协议继续同步时,消息将显示 路由列表。在
DUMP ROUTES: serial=381 announce=18/withdraw=2 NEW SERIAL 380->381
.debug消息仅仅意味着pdu已经被传输 在RTR服务器和RTR客户端之间。在
数据文件
每个序列号的JSON文件都创建了一个数据目录 ROA数据的价值。目录按YYYY-MM和文件排序 包括完整日期(UTC)。在
$ ls -lt data/ total 0 drwxr-xr-x 7 martin martin 224 Feb 11 09:36 2020-02 $ $ ls -lt data/2020-02 total 21592 -rw-r--r-- 1 martin martin 5520676 Feb 16 18:22 2020-02-17-022209.routes.00000365.json -rw-r--r-- 1 martin martin 5520676 Feb 16 18:42 2020-02-17-024242.routes.00000838.json -rw-r--r-- 1 martin martin 412 Feb 16 19:56 2020-02-17-035645.routes.00000841.json -rw-r--r-- 1 martin martin 272 Feb 16 20:16 2020-02-17-041647.routes.00000842.json -rw-r--r-- 1 martin martin 643 Feb 16 20:36 2020-02-17-043649.routes.00000843.json $
您可以查看这些文件,了解有多少RTR公告/撤销ROA 处理。在
$ for f in data/2020-02/*.json ; do echo "$f `jq -r '.routes.announce[]|.ip' < $f | wc -l` `jq -r '.routes.withdraw[]|.ip' < $f | wc -l`" ; done data/2020-02/2020-02-17-022209.routes.00000365.json 128483 0 data/2020-02/2020-02-17-024242.routes.00000838.json 128483 0 data/2020-02/2020-02-17-035645.routes.00000841.json 3 6 data/2020-02/2020-02-17-041647.routes.00000842.json 5 0 data/2020-02/2020-02-17-043649.routes.00000843.json 9 5 $
你可以列出ROA。null表示没有指定MaxLen 在ROA里。在
$ jq -r '.routes.announce[]|.ip,.asn,.maxlen' data/2020-02/*0838.json | paste - - - | sort -V | head 1.0.0.0/24 13335 null 1.1.1.0/24 13335 null 1.9.0.0/16 4788 24 1.9.12.0/24 65037 null 1.9.21.0/24 24514 null 1.9.23.0/24 65120 null 1.9.31.0/24 65077 null 1.9.65.0/24 24514 null 1.34.0.0/15 3462 24 1.36.0.0/16 4760 null $
此外,有效ROA的完整列表被转储到 data/routingtable.json,然后可以使用show命令:
$ rtr_client/rtr_show.py 1.37.0.0/16 112.198.0.0/16 ROUTE ROA MaxLen ASN 1.37.0.0/16 1.37.0.0/16 /17 AS4775 ROUTE ROA MaxLen ASN 112.198.0.0/16 112.198.0.0/16 /24 AS4775 $
-l参数将显示add更具体的roa。在
代码还可以转储原始二进制协议,然后重放该数据 使用-d|--dump参数调试协议。这将生成一个 data/__________-raw-data.bin文件。file_process.py命令 将处理该文件。在
变更日志
- 这是第一个版本,虽然它可以工作,但还没有准备好 黄金时间
- 目录格式更新为YYYY-MM拆分,以防它变大 (加上序列号可能不是连续的)
- 从第三方netaddr包移动到Python的ipaddress 数据类型
- 所有内部cidr都存储为ipaddress类型和JSON 处理现在可以正确处理该类型
- 添加了有效的路由表和show命令
- 重命名显示.py至rtr_显示.py在
- 已将代码移到rtr\u客户端文件夹
- 添加了-V/–版本标志
- 增加了对跟踪会话\u id的支持
- 修复了会话重新启动后的路由转储复制
- pypi包装的第一道工序
- 已清理路由处理
- 添加到主要调试消息的时间戳
- Connect类现在完成所有的套接字处理-只需清除 方式
许可证
根据BSD 3许可证授权。见LICENSE.txt 文件。在
- 项目
标签: