Project Icon

websocat

WebSocket 命令行工具 支持多协议连接和数据传输

websocat 是一个 WebSocket 命令行工具,用于连接和服务 WebSocket。它支持外部程序与 WebSocket 通信、文本和二进制模式转换、inetd 模式、UNIX 套接字、Nginx 集成、SOCKS5 代理和自动重连。该工具可在 Linux、Windows 和 Mac 上运行,并提供预编译可执行文件。websocat 能够满足多种 WebSocket 相关需求。

websocat

WebSocket版的Netcat、curl和socat。

Gitter image-build

示例

连接到公共回声服务器(按Ctrl+D退出)

$ websocat ws://ws.vi-server.org/mirror
123
123
ABC
ABC

$ docker run --rm -ti ghcr.io/vi/websocat:nightly wss://ws.vi-server.org/mirror
123
123
ABC
ABC

服务端和客户端

A$ websocat -s 1234
正在监听 ws://127.0.0.1:1234/
ABC
123

B$ websocat ws://127.0.0.1:1234/
ABC
123

使用远程调试打开Chromium标签页

$ chromium --remote-debugging-port=9222&
$ curl -sg http://127.0.0.1:9222/json/new | grep webSocketDebuggerUrl | cut -d'"' -f4 | head -1
ws://127.0.0.1:9222/devtools/page/A331E56CCB8615EB4FCB720425A82259
$ echo 'Page.navigate {"url":"https://example.com"}' | websocat -n1 --jsonrpc --jsonrpc-omit-jsonrpc ws://127.0.0.1:9222/devtools/page/A331E56CCB8615EB4FCB720425A82259
{"id":2,"result":{"frameId":"A331E56CCB8615EB4FCB720425A82259","loaderId":"EF5AAD19F2F8BB27FAF55F94FFB27DF9"}}

将TCP连接代理到WebSocket连接,反之亦然

$ websocat --oneshot -b ws-l:127.0.0.1:1234 tcp:127.0.0.1:22&
$ websocat --oneshot -b tcp-l:127.0.0.1:1236 ws://127.0.0.1:1234/&
$ nc 127.0.0.1 1236
SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u3
qwertyu
协议不匹配。

在已连接的WebSocket客户端之间广播所有消息

A$ websocat -t ws-l:127.0.0.1:1234 broadcast:mirror:
B$ websocat ws://127.0.0.1:1234
C$ websocat ws://127.0.0.1:1234

(如果你喜欢这个,你可能会想使用 https://github.com/vi/wsbroad/

更多示例请参见 moreexamples.md

功能

  • 从命令行连接和提供WebSocket服务。
  • 执行外部程序,使其通过stdin/stdout与WebSocket通信。
  • 文本和二进制模式,在行(或空终止记录)和消息之间转换。
  • Inetd模式,UNIX套接字(在Linux上包括抽象命名空间)。
  • 使用TCP或UNIX套接字与Nginx集成。
  • 直接使用未经身份验证的SOCKS5服务器连接WebSocket和监听WebSocket连接。
  • 自动重连和连接重用模式。
  • 支持Linux、Windows和Mac,提供预构建可执行文件
  • 具有可覆盖底层传输连接的低级WebSocket客户端和服务器,例如调用外部程序作为websocat的传输(用于SSL、代理等)。

安装

安装WebSocat有多种方法。从简单到复杂:

Fedora

Copr: sudo dnf copr enable atim/websocat -y && sudo dnf install websocat

FreeBSD

pkg install websocat

Debian / Ubuntu

  • GitHub releases下载预构建的可执行文件。
  • Websocat尚未正式打包到Debian。一些较旧版本的Websocat可能在GitHub releases上提供Debian软件包文件。

macOS

Homebrew: brew install websocat

MacPorts: sudo port install websocat

从源代码安装

  • 安装Rust工具链,然后执行cargo install --features=ssl websocat。如果某个-sys包失败,尝试不带--features=ssl
  • 从源代码构建Websocat(见下文),然后将target/release/websocat移动到PATH中的某个位置。

预构建二进制文件

releases页面提供了适用于Linux(普通和musl)、Windows、OS X和Android的预构建二进制文件。

从源代码构建

  1. 安装Rust工具链。注意,由于其旧依赖项可能被例如这个破坏,Websocat v1(即当前稳定版本)可能无法支持太新的Rust。
  2. cargo build --release --features=ssl
  3. target/下找到可执行文件,例如在target/release/websocat中。

Rust版本

Websocat版本最低Rust版本最高Rust版本
1.9 - 1.111.46可能1.63
1.6 - 1.81.34可能1.63
1.3 - 1.51.311.47?
1.21.281.47?
1.0-1.11.231.47?
1.2??

注意,使用旧版Rust(如1.46)构建可能需要在构建前手动将Cargo.lock.legacy复制到Cargo.lock

更早的非异步版本的Websocat应该可以用更旧的rustc构建。

注意,由于https://github.com/rust-lang/rust/pull/71274/,如果使用Rust 1.48或更高版本构建旧版本的Websocat,可能会出现异常行为。

由于[IP地址表示重构],不建议使用Rust 1.64构建v1.x系列的Websocat。这可能会暴露出旧依赖项中先前隐藏的未定义行为。(实际上,它似乎可以正常工作 - 但自我上次详细检查Websocat以来已经过去了很长时间)。

Android上的SSL

websocat的wss://在Android上可能会失败。作为解决方法,下载证书包,例如从https://curl.haxx.se/ca/cacert.pem,并明确指定:

SSL_CERT_FILE=cacert.pem /data/local/tmp/websocat wss://echo.websocket.org

或者直接使用--insecure选项。

文档

基本用法示例在本README顶部和--help消息中提供。更多技巧在moreexamples.md中描述。

这里有一个所有地址类型和覆盖层的列表

`websocat --help=long`输出
websocat 1.13.0
Vitaly "_Vi" Shukela <vi0oss@gmail.com>
WebSocket的命令行客户端,类似于ws://的netcat/curl/socat。

用法:
    websocat ws://URL | wss://URL               (简单客户端)
    websocat -s port                            (简单服务器)
    websocat [FLAGS] [OPTIONS] <addr1> <addr2>  (高级模式)
标志:
--stdout-announce-listening-ports        [A] 为每个正在监听的端口向标准输出打印一行
--async-stdio
    [A] 在UNIX系统上,将标准输入和标准输出设置为非阻塞模式,而不是生成线程。这应该可以提高性能,但可能会影响在同一控制台上运行的其他程序。
--compress-deflate
    [A] 使用deflate方法压缩传入WebSocket的数据。仅影响二进制WebSocket消息。

--compress-gzip
    [A] 使用gzip方法压缩传入WebSocket的数据。仅影响二进制WebSocket消息。

--compress-zlib
    [A] 使用zlib方法压缩传入WebSocket的数据。仅影响二进制WebSocket消息。

--crypto-reverse
    [A] 在`crypto:`指示符中交换加密和解密操作 - 读取时加密,写入时解密。

--dump-spec                              [A] 不运行,而是将指示符表示输出到标准输出
-e, --set-environment
    执行exec:/cmd:/sh-c:时设置WEBSOCAT_*环境变量
    目前包括WEBSOCAT_URI和WEBSOCAT_CLIENT,分别表示
    请求URI和客户端地址(如果是TCP)
    注意防范ShellShock或类似的安全问题。
-E, --exit-on-eof                            如果一个数据传输方向达到EOF,则关闭另一个方向
--foreachmsg-wait-read                   [A] 在关闭foreachmsg:的对等方之前等待读取完成
--jsonrpc
    将您输入的消息格式化为JSON RPC 2.0方法调用。第一个词成为方法名,其余部分成为参数,可能会自动包装在[]中。
--jsonrpc-omit-jsonrpc                   [A] 使用`--jsonrpc`时省略`jsonrpc`字段,例如用于Chromium
--just-generate-key                      [A] 仅生成Sec-WebSocket-Key值,不运行主要的Websocat
--lengthprefixed-little-endian
    [A] 对`lengthprefixed:`覆盖层使用小端帧头而不是大端。

--lengthprefixed-skip-read-direction
    [A] 仅影响`lengthprefixed:`覆盖层的一个方向,绕过另一个方向的转换。

--lengthprefixed-skip-write-direction
    [A] 仅影响`lengthprefixed:`覆盖层的一个方向,绕过另一个方向的转换。

--linemode-strip-newlines
    [A] 不在WebSocket消息中包含来自流的尾随\n或\r\n

-0, --null-terminated                        对行模式使用\0而不是\n
--no-line                                [A] 不自动插入行到消息的转换
--no-exit-on-zeromsg
    [A] 遇到零消息时不退出。零消息在Websocat内部使用,因此可能无法完全关闭连接。
--no-fixups
    [A] 不执行自动命令行修复。可能会导致websocat操作不稳定。使用--dump-spec而不使用--no-fixups来发现自动插入的内容,并阅读完整的手册了解Websocat内部工作原理。
--no-async-stdio                         [A] 如果不是tty,则禁止以非阻塞方式使用stdin/stdout
-1, --one-message                            仅发送和/或接收一条消息。与--no-close和/或-u/-U一起使用。
--oneshot                                仅服务一次。不要与-1(--one-message)混淆
--print-ping-rtts
    在每次接收到WebSocket pong后,将测量的往返时间打印到stderr。

--exec-exit-on-disconnect
    [A] 使exec:或sh-c:或cmd:在连接关闭时立即退出,不等待终止。

--exec-sighup-on-stdin-close
    [A] 使exec:或sh-c:或cmd:在UNIX上在输入关闭时发送SIGHUP。

--exec-sighup-on-zero-msg
    [A] 使exec:或sh-c:或cmd:在UNIX上面对传入的零长度消息时发送SIGHUP。

-q                                           抑制所有诊断消息,除了启动错误
--reuser-send-zero-msg-on-disconnect
    [A] 使reuse-raw:在某些客户端断开连接时向对等方发送零长度消息。

-s, --server-mode                            简单服务器模式:将TCP端口或addr:port指定为单一参数
-S, --strict
    严格的行/消息模式:丢弃过长的消息而不是拆分它们,丢弃不完整的行。

--timestamp-monotonic                    [A] 对`timestamp:`覆盖层使用单调时钟
-k, --insecure                               连接到TLS时接受无效的证书和主机名
--udp-broadcast                          [A] 设置SO_BROADCAST
--udp-multicast-loop                     [A] 设置IP[V6]_MULTICAST_LOOP
--udp-oneshot                            [A] udp-listen: 每个客户端只回复一个数据包
--udp-reuseaddr
    [A] 为UDP套接字设置SO_REUSEADDR。监听的TCP套接字总是reuseaddr。

--uncompress-deflate
    [A] 使用deflate方法解压来自WebSocket的数据。仅影响二进制WebSocket消息。

--uncompress-gzip
    [A] 使用deflate方法解压来自WebSocket的数据。仅影响二进制WebSocket消息。

--uncompress-zlib
    [A] 使用deflate方法解压来自WebSocket的数据。仅影响二进制WebSocket消息。

-u, --unidirectional                         抑制一个方向的数据复制
-U, --unidirectional-reverse
    抑制另一个方向的数据复制(如果与-u结合使用,可能会抑制两个方向)

--accept-from-fd
    [A] 在UNIX套接字监听器对等方中不调用`socket(2)`,而是使用指定的文件描述符号作为参数而不是文件名,从`accept(2)`开始
--unlink                                 [A] 在绑定到监听的UNIX套接字之前取消链接
-V, --version                                打印版本信息
-v                                           将详细级别提高到info或更高
-b, --binary                                 将消息作为二进制消息发送到WebSocket
-n, --no-close                               在EOF时不向websocket发送Close消息
--websocket-ignore-zeromsg
    [A] 静默丢弃传入的零长度WebSocket消息。由于在Websocat内部使用零长度消息作为EOF标志,它们可能会导致连接关闭。
-t, --text                                   将消息作为文本消息发送到WebSocket
--base64
    将传入的二进制WebSocket消息编码为单行Base64。如果设置了`--binary-prefix`(参见`--help=full`),则在发送之前将以该前缀开头的传出WebSocket消息从base64解码。
--base64-text
    [A] 将传入的文本WebSocket消息编码为单行Base64。我不知道这是否有用,但它是为了与`--base64`对称。

选项:
--socks5 <auto_socks5>
    使用指定的address:port作为SOCKS5代理。请注意,目前不支持代理认证。
    示例:--socks5 127.0.0.1:9050
--autoreconnect-delay-millis <autoreconnect_delay_millis>
    [A] `autoreconnect:`覆盖层的重连尝试延迟。[默认:20]

--basic-auth <basic_auth>
    添加`Authorization: Basic` HTTP请求头,其中包含此base64编码的参数

--queue-len <broadcast_queue_len>
    [A] 广播重用器的待处理队列消息数量 [默认:16]

-B, --buffer-size <buffer_size>                                  最大消息大小,以字节为单位 [默认:65536]
--byte-to-exit-on <byte_to_exit_on>
    [A] 覆盖byte_to_exit_on:覆盖层寻找的字节 [默认:28]

--client-pkcs12-der <client_pkcs12_der>                      [A] 客户端身份TLS证书
--client-pkcs12-passwd <client_pkcs12_passwd>
    [A] --client-pkcs12-der pkcs12存档的密码。在Mac上必需。

--close-reason <close_reason>
    以原因消息关闭连接。此选项仅在提供--close-status-code选项时生效。
--close-status-code <close_status_code>                      以状态码关闭连接。
--crypto-key <crypto_key>
    [A] 为`crypto:`指示符指定加密/解密密钥。需要`base64:`、`file:`或`pwd:`前缀。
-H, --header <自定义头部>...
    向WebSocket客户端请求添加自定义HTTP头部。使用冒号和可选的单个空格分隔头部名称和值。可多次使用。注意单个-H可能会吞掉多个后续参数,导致令人困惑的错误。请在最后指定头部或使用等号,如-H='X: y'。
--server-header <自定义响应头部>...
    向WebSocket升级响应添加自定义HTTP头部。使用冒号和可选的单个空格分隔头部名称和值。可多次使用。注意单个-H可能会吞掉多个后续参数,导致令人困惑的错误。
--exec-args <执行参数>...
    [A] 用于`exec:`说明符的参数。必须是最后一个选项,之后的所有内容都会进入exec参数列表。
--header-to-env <转发到环境变量的头部>...
    将指定的传入请求头部转发到H_*环境变量,用于`exec:`类说明符。

-h, --help <帮助>
    查看帮助。
    --help=short 列出简单选项和地址类型
    --help=long 列出所有选项和类型(请参阅[A]标记)
    --help=doc 还显示更长的描述和示例。
--inhibit-pongs <抑制pong回复>
    [A] 在指定数量的回复后停止回复传入的WebSocket ping。

--just-generate-accept <仅生成接受值>
    [A] 仅根据提供的Sec-WebSocket-Key值生成Sec-WebSocket-Accept值,而不运行主要的Websocat。
--lengthprefixed-nbytes <长度前缀字节数>
    [A] 为`lengthprefixed:`覆盖层使用此数量的长度头部字节。[默认值:4]

--max-messages <最大消息数>
    单个方向复制的最大消息数。

--max-messages-rev <反向最大消息数>
    另一个方向复制的最大消息数。

--conncap <最大并行连接数>
    监听模式下的最大同时连接数。

--max-sent-pings <最大发送ping数>
    [A] 发送此数量的ping后停止发送。

--max-ws-frame-length <最大WS帧长度>
    [A] 传入WebSocket帧的最大大小,以防止内存溢出 [默认值:104857600]

--max-ws-message-length <最大WS消息长度>
    [A] 传入WebSocket消息的最大大小(不包括一个数据帧),以防止内存溢出 [默认值:209715200]
--origin <源>                                            向WebSocket客户端请求添加Origin HTTP头部
--pkcs12-der <pkcs12_der>
    接受SSL连接所需的pkcs12存档,包含证书和密钥。
    生成它的命令:openssl pkcs12 -export -out output.pkcs12 -inkey key.pem -in cert.pem
    与-s(--server-mode)选项一起使用或手动指定TLS覆盖层。
    更多信息请参阅moreexamples.md。
--pkcs12-passwd <pkcs12密码>
    --pkcs12-der pkcs12存档的密码。在Mac上是必需的。

-p, --preamble <前导>...
    用指定的字符串作为复制数据的前缀。可多次指定。

-P, --preamble-reverse <反向前导>...
    用指定的字符串作为复制数据的前缀(反向)。可多次指定。

--prometheus <prometheus>
    除了运行常规Websocat会话外,还在指定的IP地址和端口上公开Prometheus指标。

--request-header <请求头部>...
    [A] 为`http-request:`说明符指定HTTP请求头部。

-X, --request-method <请求方法>                            [A] 用于`http-request:`说明符的方法
--request-uri <请求URI>                                  [A] 用于`http-request:`说明符的URI
--restrict-uri <限制URI>
    提供WebSocket服务时,仅接受给定的URI,如`/ws`
    这样可以释放其他URI用于提供静态文件或代理等功能。
-F, --static-file <服务静态文件>...
    为非WebSocket连接提供命名的静态文件。
    参数语法:<URI>:<Content-Type>:<文件路径>
    参数示例:/index.html:text/html:index.html
    出于安全原因,不支持也不会支持目录。
    可多次指定。建议在最后指定或使用等号,如`-F=...`,
    否则此选项可能会吞掉位置参数。
--socks5-bind-script <socks5绑定脚本>
    [A] 在`socks5-bind:`模式下,当远程端口号已知时执行指定的脚本。

--socks5-destination <socks目标>
    [A] 示例:1.2.3.4:5678  2600:::80  hostname:5678

--tls-domain <tls域名>
    [A] 使用tls-connect:覆盖层时指定SNI或证书验证的域名

--udp-multicast <udp加入多播地址>...
    [A] 为指定的多播地址发出IP[V6]_ADD_MEMBERSHIP。可多次指定。

--udp-multicast-iface-v4 <udp加入多播接口v4>...
    [A] 多播网络接口的IPv4地址。必须不指定或指定与多播IPv4地址相同的次数。顺序很重要。
--udp-multicast-iface-v6 <udp加入多播接口v6>...
    [A] IPv6多播的网络接口索引。必须不指定或指定与多播IPv6地址相同的次数。顺序很重要。
--udp-ttl <udp_ttl>                                          [A] 设置IP_TTL,如果适用还设置IP_MULTICAST_TTL
--protocol <websocket协议>
    连接时指定此Sec-WebSocket-Protocol:头部

--server-protocol <websocket回复协议>
    接受连接时强制使用此Sec-WebSocket-Protocol:头部

--websocket-version <websocket版本>                      覆盖Sec-WebSocket-Version值
--binary-prefix <ws二进制前缀>
    [A] 在每个接收到的WebSocket二进制消息前添加指定文本。同时从发出的消息中去除此前缀,即使指定了`--text`也将它们显式标记为二进制
--ws-c-uri <ws_c_uri>
    [A] 用于ws-c:覆盖层的URI [默认值:ws://0.0.0.0/]

--ping-interval <ws_ping间隔>                           每隔这么多秒发送WebSocket ping
--ping-timeout <ws_ping超时>
    如果在这么多秒内未收到Pong消息,则断开WebSocket连接

--text-prefix <ws文本前缀>
    [A] 在每个接收到的WebSocket文本消息前添加指定文本。同时从发出的消息中去除此前缀,即使指定了`--binary`也将它们显式标记为文本

参数:
    <addr1>    在简单模式下,要连接的WebSocket URL。在高级模式下,第一个要使用的地址(有多种类型的地址)。有关地址类型的信息,请参阅--help=types。如果这是一个用于监听的地址,它将尝试服务多个连接。
    <addr2>    在高级模式下,要连接的第二个地址。如果这是一个用于监听的地址,它将只接受一个连接。


基本示例:
  命令行WebSocket客户端:
    websocat ws://ws.vi-server.org/mirror/
    
  WebSocket服务器:
    websocat -s 8080
    
  WebSocket到TCP代理:
    websocat --binary ws-l:127.0.0.1:8080 tcp:127.0.0.1:5678
地址类型完整列表:
ws://           	不安全(ws://)WebSocket客户端。参数为主机和URL。
wss://          	安全(wss://)WebSocket客户端。参数为主机和URL。
ws-listen:      	WebSocket服务器。参数为要监听的主机和端口。
inetd-ws:       	WebSocket inetd服务器。[A]
l-ws-unix:      	基于UNIX套接字的WebSocket服务器。[A]
l-ws-abstract:  	WebSocket抽象命名空间UNIX套接字服务器。[A]
ws-lowlevel-client:	[A] 低级HTTP独立WebSocket客户端连接,无关联的HTTP升级。
ws-lowlevel-server:	[A] 低级HTTP独立WebSocket服务器连接,无关联的HTTP升级。
wss-listen:     	在TCP端口监听安全WebSocket连接
http:           	[A] 发出HTTP请求,接收1xx或2xx响应,然后传递
asyncstdio:     	[A] 将标准输入和标准输出设置为非阻塞模式,然后用作通信对象。仅限UNIX。
inetd:          	类似于`asyncstdio:`,但用于inetd(8)。[A]
tcp:            	连接到指定的TCP主机和端口。参数为套接字地址。
tcp-listen:     	在指定地址监听TCP端口。
ssl-listen:     	在TCP端口监听SSL连接
sh-c:           	使用`sh -c`启动指定的命令行(即使在Windows上)
cmd:            	使用`sh -c`或`cmd /C`启动指定的命令行(取决于平台)
exec:           	直接执行程序(不使用子shell),在Unix上提供参数数组 [A]
readfile:       	同步读取文件。参数为文件路径。
writefile:      	同步截断并写入文件。
appendfile:     	同步追加文件。
udp:            	从随机UDP端口向指定UDP套接字发送和接收数据包
udp-listen:     	将UDP套接字绑定到指定的主机:端口,接收数据包
open-async:     	打开文件以读写,并像套接字一样使用。[A]
open-fd:        	将指定的文件描述符用作套接字。[A]
threadedstdio:  	[A] 标准输入/标准输出,生成线程(线程版本)。
-               	从控制台读取输入,打印到控制台。除非通过`--async-stdio` CLI选项请求,否则即使在UNIX上也使用线程实现。
unix:           	连接到UNIX套接字。参数为文件系统路径。[A]
unix-listen:    	在指定的UNIX套接字上监听连接 [A]
unix-dgram:     	向一个路径发送数据包,从另一个路径接收。[A]
abstract:       	连接到UNIX抽象命名空间套接字。参数为用作地址的字符串。[A]
abstract-listen:	在指定的抽象UNIX套接字上监听连接 [A]
abstract-dgram: 	向一个地址发送数据包,从另一个地址接收。[A]
mirror:         	简单地将输出复制到输入。不需要参数。
literalreply:   	对每个输入数据包回复指定字符串。
clogged:        	什么都不做。不读取或写入任何字节。保持连接处于"挂起"状态。[A]
literal:        	输出字符串,丢弃输入。
assert:         	检查输入。[A]
assert2:        	检查输入。[A]
seqpacket:      	连接到AF_UNIX SOCK_SEQPACKET套接字。参数为文件系统路径。[A]
seqpacket-listen:	在指定的AF_UNIX SOCK_SEQPACKET套接字上监听连接 [A]
random:         	被读取时生成随机字节,丢弃写入的字节。

重叠层完整列表:
ws-upgrade:     	WebSocket升级器/原始服务器。指定您自己的协议而不是通常的TCP。[A]
http-request:   	[A] 发出HTTP请求,接收1xx或2xx响应,然后传递
http-post-sse:  	[A] 接受HTTP/1请求。然后,如果是GET,
ssl-connect:    	在现有连接之上添加TLS加密的重叠层 [A]
ssl-accept:     	使用任意后备流接受TLS连接。[A]
reuse-raw:      	重用子指定符以服务多个客户端:不可预测模式。[A]
broadcast:      	重用此连接以服务多个客户端,将回复发送给所有客户端。
autoreconnect:  	在任何错误或EOF时重新建立底层连接
ws-c:           	低级WebSocket连接器。参数为其他地址。[A]
msg2line:       	行过滤器:将数据包流中的消息转换为字节流的行。[A]
line2msg:       	行过滤器:将字节流中的行转换为由'\n'或'\0'分隔的消息 [A]
lengthprefixed: 	将字节流转换为/从带有长度前缀帧的数据包。[A]
foreachmsg:     	为每个传入消息执行操作。
log:            	记录通过底层连接器的每个缓冲区。
jsonrpc:        	[A] 将像`abc 1,2`这样的消息转换为`{"jsonrpc":"2.0","id":412, "method":"abc", "params":[1,2]}`。
timestamp:      	[A] 在每个传入消息前添加时间戳。
socks5-connect: 	SOCKS5代理客户端(原始)[A]
socks5-bind:    	SOCKS5代理客户端(原始,bind命令)[A]
crypto:         	[A] 使用静态密钥加密写入的消息并解密(并验证)读取的消息,使用ChaCha20-Poly1305算法。
prometheus:     	[A] 统计连接、消息、字节和其他数据,并在单独的端口上公开Prometheus指标。
exit_on_specific_byte:	[A] 将特定字节转换为EOF,允许用户退出交互式Websocat会话
waitfordata:    	在开始连接之前等待一些数据待写入。[A]

一些注意事项
---

* 支持IPv6,根据上下文将IP地址用方括号括起来或直接使用。
* 不强制使用Web套接字,您可以在两端使用任何规格。
* 通常,二进制流中的一行对应一个WebSocket文本消息。这可以通过选项进行调整。

限制
---

* 它只连接(或服务)HTTP/1。目前不支持[RFC 8441](https://www.rfc-editor.org/rfc/rfc8441)或[RFC 9220](https://www.rfc-editor.org/rfc/rfc9220.html)。
* 当混合使用文本和二进制WebSocket消息时不太方便。这会影响`mirror:`指定符,使其与ws://echo.websocket.org略有不同。有`--binary-prefix`、`--text-prefix`和`--base64`选项来处理二进制和文本的混合。
* Websocat的当前版本不会收到关于已关闭套接字的通知。这使得在没有`-E`或`-u`选项或在背压场景下的服务容易出现套接字泄漏。
* 未集成readline。建议用户使用[`rlwrap`](https://linux.die.net/man/1/rlwrap)工具包装websocat,以获得更方便的CLI。
* Websocat当前版本的构建过程未得到适当自动化,且较为脆弱。

另请参阅
---

* [wstunnel](https://github.com/erebe/wstunnel)
* [wscat](https://github.com/websockets/wscat)
* [websocketd](https://github.com/joewalnes/websocketd)
* [wsd](https://github.com/alexanderGugel/wsd)
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号