RTR RFC8210协议在Python中的一个简单客户端实现

rpki-rtr-client的Python项目详细描述


简介

RTR的一个简单的客户端实现 ^Python中的{a1}协议。 查看Cloudflare的博客 RPKI获取更多开源 RPKI代码。在

安装

目前,使用pip最容易安装代码。在

$ pip3 install rpki-rtr-client
$ rtr_client

使用了pytricia包 用于存储路由表。在

使用

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 文件。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java搜索具有外键的JPA实体的约定是什么?   java事务没有使用事务和嵌套方法的2个实例回滚   SpringBootJavaMessageFormat。使用umlauts格式(ä/ö/ü)   java如何通过字符串在sqlite中搜索列   JAVAlang.ClassNotFoundException:org。冬眠Hibernate4的例外情况   java消息正文在Gmail中被弄乱了   java Apache Ignite未使用空值更新缓存   Java正则表达式未捕获组   java onBackPressed();除非我叫super否则不行。onBackPressed();两次密码   java CustomAlertDialog在删除数据库记录后未完成其进程   C++中的迭代器(Stl)与java,是否存在概念上的区别?   Java在不知道字符编码的情况下将字节[]转换为字符串   来自本地WSDL文件的java Web服务客户端   java工具可用于在一个位置聚合所有项目相关信息   java在Netbeans中的maven项目中设置依赖项