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 次下载
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 --update
或rdap-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(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT),任选其一。
贡献
除非您明确说明,否则任何贡献(根据Apache-2.0许可证定义),由您有意提交以包含在本作品中的,应根据Apache许可证版本2.0或上述提到的MIT许可证双重许可,由ICANN选择,不附加任何额外条款或条件。
依赖项
~68MB
~1M SLoC