6 个版本
0.3.7 | 2022年3月20日 |
---|---|
0.3.6 | 2021年10月21日 |
0.3.4 | 2021年9月29日 |
#11 in #网络客户端
22KB
456 行
串行控制台 TCP 服务器+复用器和网络客户端
TCP 服务器
这个小程序旨在将串行端口共享到网络中,以便可以通过 telnet 等方式访问。
控制台服务器允许基本无限数量的并发客户端连接。所有客户端都会看到相同的串行端口数据,因为它是复制到所有客户端的。
必须使用 -w 选项单独启用写入支持。否则,所有 TCP 连接都是只读的,即无法写入串行端口。如果启用了写入,任何客户端都可以写入控制台。包含的网络客户端不支持写入。必须使用类似 telnet
或 nc
的工具。
关于安全性的说明:没有任何安全性。没有访问控制列表(ACL)、没有加密、没有身份验证。什么都没有。您可能只应该在通过 ssh 连接进行 tcp 端口转发,并限制控制台服务器仅监听 localhost 的情况下使用此程序。
此程序最初仅用于学习 Rust。它是我用 Python 编写的旧代码的稍微改进的重实现。
USAGE:
console-server [FLAGS] [OPTIONS]
FLAGS:
-d, --debug
-h, --help Prints help information
-t, --trace
-V, --version Prints version information
-w, --write
OPTIONS:
-l, --listen <listen> [default: 127.0.0.1:24242]
-b, --ser-baud <ser-baud> [default: 9600]
--ser-datab <ser-datab> [default: 8]
--ser-flow <ser-flow> [default: none]
--ser-parity <ser-parity> [default: N]
--ser-stopb <ser-stopb> [default: 1]
-s, --serial-port <serial-port> [default: /dev/ttyUSB0]
网络客户端
USAGE:
console-web [FLAGS] [OPTIONS]
FLAGS:
-d, --debug
-h, --help Prints help information
-t, --trace
-V, --version Prints version information
OPTIONS:
-c, --connect <connect> [default: 127.0.0.1:24242]
-l, --listen <listen> [default: 127.0.0.1:8080]
控制台客户端在指定的监听地址上启动了一个小的内部 web 服务器,使用 hyper
。首页来自 index()
简单,并包含创建面向行的控制台窗口的 HTML 代码。HTML 是从 Sailfish 模板渲染的。
HTML 控制台窗口使用由同一 web 服务器提供的 event-stream。
基本 URL/请求路由是通过函数 req_router()
处理的。
事件流输出是面向行的,并使用 DIY 输入解码器,该解码器基本上是从 tokio_util
LinesCodec
复制并进行了大量修改,以包装长行并用下划线替换不可打印的字符。它有点粗暴但有效。
示例运行
$ ./target/debug/console-web
[2021-09-29T12:06:28Z INFO net_serial_console::startup] Starting up Serial console web...
[2021-09-29T12:06:28Z INFO console_web] Listening on 127.0.0.1:8080
[2021-09-29T12:07:31Z INFO console_web] 127.0.0.1:54716 GET /console/client
使用 wget
进行测试
$ wget -qS -O- http://127.0.0.1:8080/client
HTTP/1.1 200 OK
content-type: text/event-stream; charset=utf-8
cache-control: no-cache
transfer-encoding: chunked
date: Wed, 29 Sep 2021 12:09:03 GMT
retry: 999999
id: 1
data: *** Connected to: /dev/ttyUSB0
请注意,还有一个控制台服务器在端口 24242 上运行,以提供实际的串行端口访问。
依赖项
~13–25MB
~342K SLoC