6个版本

0.3.1 2023年12月13日
0.3.0 2023年12月12日
0.2.0 2023年6月3日
0.1.1 2023年5月28日
0.1.0-alpha2022年12月4日

#504 in 网络编程

MIT 许可证

80KB
1.5K SLoC

Project Status: Active – The project has reached a stable, usable state and is being actively developed. CI Status codecov.io Minimum Supported Rust Version MIT License

GitHub | crates.io | 问题 | 变更日志

confab 是一个支持TLS的异步行向交互式TCP客户端。使用它连接到TCP服务器,您将能够逐行发送消息,而来自远程服务器的接收到的行将被打印在提示符上方。

安装

发布资产

最常见的平台上的预构建二进制文件作为GitHub发布资产提供。 最新发布页面 在 "资产" 下列出这些,以及适用于Unix-like系统和Windows的安装脚本。

作为安装脚本的替代方案,如果您系统上有 cargo-binstall,您可以使用它通过运行 cargo binstall confab 下载并安装适用于您的系统的最新版本的 confab 的适当发布资产。

Cargo

如果您已安装 Rust和Cargo,您可以通过运行以下命令构建 confab 的最新版本并将其安装到 ~/.cargo/bin 中:

cargo install confab

confab 具有以下Cargo功能,可通过 --features <LIST> 选项选择,在 cargo install 中:

  • rustls — 使用 rustls 以支持TLS。

    • 该功能默认启用,并覆盖任何其他功能;因此,为了启用 nativevendored-openssl 功能,必须将 --no-default-features 选项传递给 cargo install,并附加 --features ... 选项。

    • 发布资源是以启用此功能的方式构建的。

  • native — 使用 native-tls 提供TLS支持。

  • vendored-openssl — 将OpenSSL的私有副本编译进 confab,而不是在运行时使用平台的副本。这使得可以在一个系统上构建 confab 并在具有不同OpenSSL版本的另一个系统上运行它。

    • 此功能意味着启用了 native 功能。

    • 在macOS或Windows上,此选项没有意义,因为在这两个系统上 confab 不使用OpenSSL进行TLS连接。

用法

confab [<options>] <host> <port>

打开到指定主机和端口的TCP连接。用户在 confab 提示符中输入的行发送到远程服务器,并以 ">" 前缀在本地回显,而来自远程服务器的行则以 "<" 前缀打印在提示符上方。当远程服务器关闭连接或用户按下Ctrl-D时,通信停止。

confab 依赖于 rustyline-async 来实现类似readline的功能;有关支持的控制序列,请参阅那里。

选项

  • --build-info — 显示程序的构建信息摘要和依赖关系,然后退出

  • --crlf — 在发送到远程服务器的每一行后面附加 CR LF ("\r\n") 而不是仅LF ("\n")

  • -E <encoding>--encoding <encoding> — 设置连接的文本编码。可用选项包括

    • utf8 (默认) — 使用 UTF-8。如果从远程服务器接收到的行包含无效的UTF-8序列,则序列将替换为 U+FFFD 替换字符 ()。

    • utf8-latin1 — 使用 UTF-8。如果从远程服务器接收到的行包含无效的UTF-8序列,则整个行将解码为 Latin-1。(对IRC很有用!)

    • latin1 — 使用 Latin-1(也称为ISO-8859-1)。如果发送到远程服务器的行包含非Latin-1字符,则它们将被问号 (?) 替换。

  • -h--help — 显示命令行选项摘要,然后退出

  • --max-line-length <LIMIT> — 设置从远程服务器读取的每一行的最大字节长度(包括终止换行符)。如果服务器发送的行超过此长度,则前 <LIMIT> 字节将被分割并作为一个完整的行处理,剩余的字节将作为新行的开始处理。[默认值:65535]

  • --servername <域名> — (与 --tls 一起使用) 使用指定的域名进行SNI和证书主机名验证;默认为远程主机名

  • --startup-wait-ms <整数> — 指定发送启动脚本每一行前等待的毫秒数 [默认值:500]

  • -S <文件>--startup-script <文件> — 在启动时,从指定的文件中读取行并将其逐行发送到服务器。用户只有在达到文件末尾后才会被提示输入。

  • -t--show-times — 在打印到终端的每一行前添加时间戳,格式为 [HH:MM:SS]

  • --tls — 使用SSL/TLS连接

  • -T <文件>--transcript <文件> — 将事件记录追加到指定的文件。有关更多信息,请参阅下面的 事件记录格式

  • -V--version — 显示程序版本并退出

事件记录格式

--transcript 选项生成会话事件记录的格式为JSON Lines(即换行分隔的JSON),即每行包含一个JSON对象。每个JSON对象代表一个事件,如发送的行、接收的行或连接的开始或结束。

每个对象至少包含一个包含事件时间戳的 "timestamp" 字段,格式为 "YYYY-MM-DDTHH:MM:SS.ssssss+HH:MM",以及一个标识事件类型的 "event" 字段。该字段的可能值以及任何附加字段如下所示

  • "connection-start" — 在开始连接到远程服务器之前发出。事件对象还包含 "host""port" 字段,列出命令行上指定的远程主机和端口。

  • "connection-complete" — 在成功连接后(但在协商TLS之前,如果适用)发出。事件对象还包含一个 "peer_ip" 字段,列出连接到的远程IP地址。

  • "tls-start" — 在开始TLS握手之前发出。事件对象没有其他字段。

  • "tls-complete" — 在完成TLS握手后发出。事件对象没有其他字段。

  • "recv" — 每当从远程服务器接收到一行时触发。事件对象还包含一个 "data" 字段,给出接收到的行,包括尾随换行符(如果有)。

  • "send" — 每当向远程服务器发送一行时触发。事件对象还包含一个 "data" 字段,给出发送的行,包括尾随换行符(如果有)。

  • "disconnect" — 当连接正常关闭时触发。事件对象没有其他字段。

  • "error" — 当发生致命错误时触发。事件对象还包含一个 "data" 字段,给出一个可读的错误消息。

依赖关系

~10-22MB
~314K SLoC