#串口 #串行 #控制台 #网络客户端 #客户端-服务器 #复用 #网络

程序+库 net-serial-console

串行控制台 TCP 服务器/复用器和网络客户端

6 个版本

0.3.7 2022年3月20日
0.3.6 2021年10月21日
0.3.4 2021年9月29日

#11 in #网络客户端

MIT/Apache

22KB
456

串行控制台 TCP 服务器+复用器和网络客户端

TCP 服务器

这个小程序旨在将串行端口共享到网络中,以便可以通过 telnet 等方式访问。

控制台服务器允许基本无限数量的并发客户端连接。所有客户端都会看到相同的串行端口数据,因为它是复制到所有客户端的。

必须使用 -w 选项单独启用写入支持。否则,所有 TCP 连接都是只读的,即无法写入串行端口。如果启用了写入,任何客户端都可以写入控制台。包含的网络客户端不支持写入。必须使用类似 telnetnc 的工具。

关于安全性的说明:没有任何安全性。没有访问控制列表(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