9 个版本

0.0.16 2024 年 3 月 15 日
0.0.15 2023 年 12 月 18 日
0.0.14 2023 年 11 月 26 日
0.0.13 2023 年 8 月 7 日
0.0.9 2023 年 6 月 24 日

#1619网络编程

每月 45 次下载

MIT/Apache

590KB
15K SLoC

ICANN RDAP 服务器

该服务器创建用于辅助开发 ICANN RDAP 命令行界面客户端。它可以作为一个库或作为其自己的进程启动的服务器使用。它目前具有内存存储,但其存储层已设计为将来可以容纳 PostgreSQL 后端。

该软件由互联网名称与数字地址分配机构 (ICANN) 编写并赞助。RDAP 是 IETF 的标准,RDAP 的扩展是 IETF 的 REGEXT 工作组 的当前工作活动。有关 ICANN 在 RDAP 中的作用的更多信息,请参阅 此处

此服务器中的 RDAP 核心支持如下

  • LDH 域名查找 (/domain/ldh)
  • IDN U-Label 查找 (/domain/unicode)
  • 实体查找 (/entity/handle)
  • 名称服务器查找 (/nameserver/fqdn)
  • 自治系统查找 (/autnum/123)
  • IP 地址查找 (/ip/ip_address)
  • CIDR 查找 (/ip/prefix/len)
  • 域名搜索
  • 名称服务器搜索
  • 实体搜索
  • 帮助 (/help)

从 crates.io 编译

如果您已在系统上安装了 Rust,则从源代码编译非常简单。如果您没有在系统上安装 Rust,通常很容易做到:请参阅 Rustup

如果您使用的是 Linux 系统,则需要 OpenSSL 开发文件。对于 Debian 和 Ubuntu,这通常是通过 apt install pkg-config libssl-dev 完成的。对于其他 Linux 系统,请参阅您的打包文档。

对于macOS和Windows,使用的是本地TLS库,无需安装步骤。

构建和安装: cargo install icann-rdap-srv

从源码编译

如果您已在系统上安装了 Rust,则从源代码编译非常简单。如果您没有在系统上安装 Rust,通常很容易做到:请参阅 Rustup

如果您使用的是 Linux 系统,则需要 OpenSSL 开发文件。对于 Debian 和 Ubuntu,这通常是通过 apt install pkg-config libssl-dev 完成的。对于其他 Linux 系统,请参阅您的打包文档。

对于macOS和Windows,使用的是本地TLS库,无需安装步骤。

运行测试: cargo test

然后构建软件: cargo build --release。'rdap-srv'可执行二进制文件将在target/release目录中可用。

快速入门

在您打算运行命令的目录中创建一个.env文件,并在该文件中放入以下内容

RDAP_SRV_LOG=debug
RDAP_SRV_DATA_DIR=/tmp/rdap-srv/data
RDAP_BASE_URL=http://localhost:3000/rdap

在/tmp目录中创建用于存储服务器数据文件的目录

mkdir -p /tmp/rdap-srv/data

创建默认服务器帮助信息

./target/release/rdap-srv-data srv-help --notice "this is a test server"

创建一些数据

./target/release/rdap-srv-data entity --handle foo1234 --email [email protected] --full-name "Joe User"
./target/release/rdap-srv-data nameserver --ldh ns1.example.com --registrant foo1234

启动服务器

./target/release/rdap-srv

在另一个终端中使用客户端查询服务器

./target/release/rdap -T -B https://127.0.0.1:3000/rdap ns1.example.com

服务器运行时,在另一个终端中执行以下操作以添加更多数据

./target/release/rdap-srv-data domain --ldh example.com --registrant foo1234 --ns ns1.example.com
./target/release/rdap-srv-store --update

查询新数据

./target/release/rdap -T -B https://127.0.0.1:3000/rdap example.com

有关可用选项的更多信息,请使用--help选项。

运行服务器

服务器通过环境变量进行配置。这些变量可以在shell脚本或用于设置环境变量的任何常规方式中进行配置。此外,它们还可以放在当前目录中的.env中。

  • "RDAP_SRV_LOG" - 可以是值 'info', 'error', 'debug', 'warn' 或 'trace'。默认为 'info'。
  • "RDAP_SRV_LISTEN_ADDR" - 要监听的接口的IP地址。默认为 127.0.0.1。
  • "RDAP_SRV_LISTEN_PORT" - 要监听的端口号。默认为 3000。
  • "RDAP_SRV_STORAGE" - "mem" 或 "pg",但 "pg" 不做任何事情。
  • "RDAP_SRV_DB_URL" - 使用 "pg" 存储时的数据库URL。
  • "RDAP_SRV_DATA_DIR" - 包含用于存储的文件的目录。

内存存储

内存存储中的数据由"RDAP_SRV_DATA_DIR"环境变量指定。此目录中的文件要么是有效的RDAP JSON文件,要么是包含有效RDAP JSON的模板文件。以.json结尾的文件被视为RDAP JSON,而以.template结尾的文件被视为模板文件。

内存存储支持热重载。这可以通过触摸数据目录中名为"update"或"reload"的文件来完成。"update"文件触发更新但不删除任何先前数据,除非这些数据存在于数据目录的文件中。"reload"文件触发完整重载,删除所有先前数据并用数据目录中的文件中的数据替换。

或者,您可以使用rdap-srv-store命令触摸文件以触发重载和更新: rdap-srv-store --updaterdap-srv-store --reload

创建数据

创建RDAP数据可能很复杂,但rdap-srv-data命令使其更容易。此命令不涵盖所有可能的RDAP表达式,但它涵盖了常见场景,并可作为需要更复杂RDAP数据的人的起点。

此命令有5个子命令,每个子命令都有其特定的命令行参数。使用--help选项可以查看每个子命令的参数。

rdap-srv-data entity --help
rdap-srv-data nameserver --help
rdap-srv-data domain --help
rdap-srv-data autnum --help    
rdap-srv-data network --help

模板

模板文件可以通过仅更改对象的ID来创建多个RDAP对象。可以使用rdap-srv-data命令创建一个模板文件,该文件可以用作模板。换句话说,可以使用rdap-srv-data命令创建模板文件,然后编辑文件以包含所需的对象ID。

以下命令使用--template选项创建实体模板

rdap-srv-data --template entity --handle foo --full-name "Bob Smurd"

模板中的ID数组对于每个对象类都不同

  • 域名:{"ldhName": "foo.example"}。还可以有可选的unicodeName
  • 实体:{"handle"; "XXXX"}
  • 名称服务器:{"ldhName": "ns.foo.example"}。还可以有可选的unicodeName
  • 自治系统号:{"start_autnum": 1, "end_autnum": 99}
  • IP地址:可以是{"networkId": {"startAddress": "xxx.xxx.xxx.xxx", "endAddress": "xxx.xxx.xxx.xxx"}}{"networkId": "xxx.xxx.xxx.xxx/yyy"}

重定向

模板文件还可以用来创建重定向(虽然它们被服务器作为RDAP错误模型,但实际上不是)。与其他模板一样,可以使用多个对象ID来为多个对象创建重定向。

以下命令创建一个IP网络的重定向

rdap-srv-data --redirect http://other.example/ip/11.0.0.0/16 network --cidr 11.0.0.0/16

使用您的数据

如上所述,可以使用rdap-srv-store命令来指示服务器重新加载或更新。此命令还可以通过指定目录将您自己的数据复制到数据目录中

rdap-srv-store --update /my_data/rdap

此命令将在复制数据的同时执行检查,以确保数据符合RDAP规范。

许可证

以下任一许可证下授权

贡献

除非您明确说明,否则任何贡献(根据Apache-2.0许可证定义),由您有意提交以包含在本作品中的,应根据Apache许可证版本2.0或上述提到的MIT许可证双重许可,由ICANN选择,不附加任何额外条款或条件。

依赖项

~68MB
~1M SLoC