这是一个命令行客户端,用于处理WebSockets,类似于ws://的netcat(或curl),具有类似于socat的高级功能

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/vi/websocat

相关技术点

  • WebSockets
  • Netcat
  • Curl
  • Socat

项目用途

  • websocat是一个可以连接WebSockets的工具,同时支持像Netcat,curl和socat一样的功能,可以在命令行上连接WebSockets。
  • websocat支持各种功能,例如直接使用未经身份验证的SOCKS5服务器连接WebSockets和监听WebSocket连接。
  • websocat还支持自动重新连接和连接重用模式,同时还可以与Nginx进行集成,使用TCP或UNIX套接字。
  • websocat支持文本和二进制模式,可以在行(或以空字符结尾的记录)和消息之间进行转换,并支持使用标准输入/输出流执行外部程序并使其与WebSocket通信。
  • websocat还支持低级WebSocket客户端和服务器,并支持可覆盖的底层传输连接,例如调用外部程序作为websocat的传输(用于SSL,代理等)。
  • websocat适用于网络安全领域,可以用于WebSocket连接的测试和调试。

websocat

用于WebSockets的Netcat、curl和socat。

示例

连接到公共回显服务器

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

服务与连接

A$ websocat -s 1234
Listening on 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
Protocol mismatch.

广播所有连接的 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

特点

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

安装安装WebSocat有多种选项。从简单到困难:

  • 如果您使用的是Fedora,可以从Copr安装WebSocat:sudo dnf copr enable atim/websocat -y && sudo dnf install websocat
  • 如果您使用的是FreeBSD,可以使用以下命令安装WebSocat:pkg install websocat
  • 如果您使用的是Linux Debian或Ubuntu(或其他基于dpkg的系统),请尝试从GitHub发布中下载预构建的可执行文件。Websocat尚未正式打包为Debian。一些旧版本的Websocat在Github发布上也可能有Debian软件包文件可用。
  • 如果您使用的是macOS,可以执行以下操作:
    • 使用Homebrewbrew install websocat
    • 使用MacPortssudo port install websocat
  • 下载预构建的可执行文件并将其安装到PATH。
  • 安装Rust工具链,然后执行cargo install --features=ssl websocat。如果某个-sys crate失败,请尝试不使用--features=ssl
  • 从源代码构建Websocat(见下文),然后将target/release/websocat移动到PATH中的某个位置。

Linux(通常和musl)、Windows、OS X和Android的预构建二进制文件可在发布页面上找到。

从源代码构建

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

Rust版本Websocat 版本

Websocat 版本 最低 Rust 版本 最高 Rust 版本
1.9 - 1.11 1.46 可能是 1.63
1.6 - 1.8 1.34 可能是 1.63
1.3 - 1.5 1.31 1.47
1.2 1.28 1.47
1.0-1.1 1.23 1.47

请注意,在使用旧版本的 Rust (例如 1.46) 进行构建时,可能需要在构建之前手动将 Cargo.lock.legacy 复制到 Cargo.lock

早期的非异步版本可以使用较旧的 rustc 进行构建。

请注意,如果使用 Rust 1.48 或更高版本构建旧版本的 Websocat,则可能会出现问题,因为存在 https://github.com/rust-lang/rust/pull/71274/ 中的问题。

不建议使用 Rust 1.64 构建 Websocat v1.x 系列,因为 [IP 地址表示重构] 可能会在旧依赖项中暴露以前隐藏的未定义行为。

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.11.0
Vitaly "_Vi" Shukela <vi0oss@gmail.com>
Command-line client for web sockets, like netcat/curl/socat for ws://.

USAGE:
    websocat ws://URL | wss://URL               (simple client)
    websocat -s port                            (simple server)
    websocat [FLAGS] [OPTIONS] <addr1> <addr2>  (advanced mode)

FLAGS:
        --stdout-announce-listening-ports       [A] Print a line to stdout for each port being listened
        --async-stdio                           [A] On UNIX, set stdin and stdout to nonblocking mode instead of
                                                spawning a thread. This should improve performance, but may break other
                                                programs running on the same console.
        --compress-deflate                      [A] Compress data coming to a WebSocket using deflate method. Affects
                                                only binary WebSocket messages.
        --compress-gzip                         [A] Compress data coming to a WebSocket using gzip method. Affects only
                                                binary WebSocket messages.
        --compress-zlib                         [A] Compress data coming to a WebSocket using zlib method. Affects only
                                                binary WebSocket messages.
        --crypto-reverse                        [A] Swap encryption and decryption operations in `crypto:` specifier -
                                                encrypt on read, decrypto on write.
        --dump-spec                             [A] Instead of running, dump the specifiers representation to stdout
    -e, --set-environment                       Set WEBSOCAT_* environment variables when doing exec:/cmd:/sh-c:
                                                Currently it's WEBSOCAT_URI and WEBSOCAT_CLIENT for
                                                request URI and client address (if TCP)
                                                Beware of ShellShock or similar security problems.
    -E, --exit-on-eof                           Close a data transfer direction if the other one reached EOF
        --foreachmsg-wait-read                  [A] Wait for reading to finish before closing foreachmsg:'s peer
        --jsonrpc                               Format messages you type as JSON RPC 2.0 method calls. First word
                                                becomes method name, the rest becomes parameters, possibly automatically
                                                wrapped in [].
        --just-generate-key                     [A] Just a Sec-WebSocket-Key value without running main Websocat
        --linemode-strip-newlines               [A] Don't include trailing \n or \r\n coming from streams in WebSocket
                                                messages
    -0, --null-terminated                       Use \0 instead of \n for linemode
        --no-line                               [A] Don't automatically insert line-to-message transformation
        --no-exit-on-zeromsg                    [A] Don't exit when encountered a zero message. Zero messages are used
                                                internally in Websocat, so it may fail to close connection at all.
        --no-fixups                             [A] Don't perform automatic command-line fixups. May destabilize
                                                websocat operation. Use --dump-spec without --no-fixups to discover what
                                                is being inserted automatically and read the full manual about Websocat
                                                internal workings.
        --no-async-stdio                        [A] Inhibit using stdin/stdout in a nonblocking way if it is not a tty
    -1, --one-message                           Send and/or receive only one message. Use with --no-close and/or -u/-U.
        --oneshot                               Serve only once. Not to be confused with -1 (--one-message)
        --print-ping-rtts                       Print measured round-trip-time to stderr after each received WebSocket
                                                pong.
        --exec-sighup-on-stdin-close            [A] Make exec: or sh-c: or cmd: send SIGHUP on UNIX when input is
                                                closed.
        --exec-sighup-on-zero-msg               [A] Make exec: or sh-c: or cmd: send SIGHUP on UNIX when facing incoming
                                                zero-length message.
    -q                                          Suppress all diagnostic messages, except of startup errors
        --reuser-send-zero-msg-on-disconnect    [A] Make reuse-raw: send a zero-length message to the peer when some
                                                clients disconnects.
    -s, --server-mode                           Simple server mode: specify TCP port or addr:port as single argument
    -S, --strict                                strict line/message mode: drop too long messages instead of splitting
                                                them, drop incomplete lines.
        --timestamp-monotonic                   [A] Use monotonic clock for `timestamp:` overlay
    -k, --insecure                              Accept invalid certificates and hostnames while connecting to TLS
        --udp-broadcast                         [A] Set SO_BROADCAST
        --udp-multicast-loop                    [A] Set IP[V6]_MULTICAST_LOOP
        --udp-oneshot                           [A] udp-listen: replies only one packet per client
        --udp-reuseaddr                         [A] Set SO_REUSEADDR for UDP socket. Listening TCP sockets are always
                                                reuseaddr.
        --uncompress-deflate                    [A] Uncompress data coming from a WebSocket using deflate method.
                                                Affects only binary WebSocket messages.
        --uncompress-gzip                       [A] Uncompress data coming from a WebSocket using deflate method.
                                                Affects only binary WebSocket messages.
        --uncompress-zlib                       [A] Uncompress data coming from a WebSocket using deflate method.
                                                Affects only binary WebSocket messages.
    -u, --unidirectional                        Inhibit copying data in one direction
    -U, --unidirectional-reverse                Inhibit copying data in the other direction (or maybe in both directions
                                                if combined with -u)
        --accept-from-fd                        [A] Do not call `socket(2)` in UNIX socket listener peer, start with
                                                `accept(2)` using specified file descriptor number as argument instead
                                                of filename
        --unlink                                [A] Unlink listening UNIX socket before binding to it
    -V, --version                               Prints version information
    -v                                          Increase verbosity level to info or further
    -b, --binary                                Send message to WebSockets as binary messages
    -n, --no-close                              Don't send Close message to websocket on EOF
        --websocket-ignore-zeromsg              [A] Silently drop incoming zero-length WebSocket messages. They may
                                                cause connection close due to usage of zero-len message as EOF flag
                                                inside Websocat.
    -t, --text                                  Send message to WebSockets as text messages
        --base64                                Encode incoming binary WebSocket messages in one-line Base64 If
                                                `--binary-prefix` (see `--help=full`) is set, outgoing WebSocket
                                                messages that start with the prefix are decoded from base64 prior to
                                                sending.
        --base64-text                           [A] Encode incoming text WebSocket messages in one-line Base64. I don't
                                                know whether it can be ever useful, but it's for symmetry with
                                                `--base64`.

OPTIONS:
        --socks5 <auto_socks5>
            Use specified address:port as a SOCKS5 proxy. Note that proxy authentication is not supported yet. Example:
            --socks5 127.0.0.1:9050
        --autoreconnect-delay-millis <autoreconnect_delay_millis>
            [A] Delay before reconnect attempt for `autoreconnect:` overlay. [default: 20]

        --basic-auth <basic_auth>
            Add `Authorization: Basic` HTTP request header with this base64-encoded parameter

        --queue-len <broadcast_queue_len>
            [A] Number of pending queued messages for broadcast reuser [default: 16]

    -B, --buffer-size <buffer_size>                                  Maximum message size, in bytes [default: 65536]
        --byte-to-exit-on <byte_to_exit_on>
            [A] Override the byte which byte_to_exit_on: overlay looks for [default: 28]

        --client-pkcs12-der <client_pkcs12_der>                      [A] Client identity TLS certificate
        --client-pkcs12-passwd <client_pkcs12_passwd>
            [A] Password for --client-pkcs12-der pkcs12 archive. Required on Mac.

        --close-reason <close_reason>
            Close connection with a reason message. This option only takes effect if --close-status-code option is
            provided as well.
        --close-status-code <close_status_code>                      Close connection with a status code.
        --crypto-key <crypto_key>
            [A] Specify encryption/decryption key for `crypto:` specifier. Requires `base64:`, `file:` or `pwd:` prefix.

    -H, --header <custom_headers>...
            Add custom HTTP header to websocket client request. Separate header name and value with a colon and
            optionally a single space. Can be used multiple times. Note that single -H may eat multiple further
            arguments, leading to confusing errors. Specify headers at the end or with equal sign like -H='X: y'.
        --server-header <custom_reply_headers>...
            Add custom HTTP header to websocket upgrade reply. Separate header name and value with a colon and
            optionally a single space. Can be used multiple times. Note that single -H may eat multiple further
            arguments, leading to confusing errors.
        --exec-args <exec_args>...
            [A] Arguments for the `exec:` specifier. Must be the last option, everything after it gets into the exec
            args list.
        --header-to-env <headers_to_env>...
            Forward specified incoming request header to H_* environment variable for `exec:`-like specifiers.

    -h, --help <help>
            See the help.
            --help=short is the list of easy options and address types
            --help=long lists all options and types (see [A] markers)
            --help=doc also shows longer description and examples.
        --just-generate-accept <just_generate_accept>
            [A] Just a Sec-WebSocket-Accept value based on supplied Sec-WebSocket-Key value without running main
            Websocat
        --max-messages <max_messages>
            Maximum number of messages to copy in one direction.

        --max-messages-rev <max_messages_rev>
            Maximum number of messages to copy in the other direction.

        --conncap <max_parallel_conns>
            Maximum number of simultaneous connections for listening mode

        --max-ws-frame-length <max_ws_frame_length>
            [A] Maximum size of incoming WebSocket frames, to prevent memory overflow [default: 104857600]

        --max-ws-message-length <max_ws_message_length>
            [A] Maximum size of incoming WebSocket messages (sans of one data frame), to prevent memory overflow
            [default: 209715200]
        --origin <origin>                                            Add Origin HTTP header to websocket client request
        --pkcs12-der <pkcs12_der>
            Pkcs12 archive needed to accept SSL connections, certificate and key.
            A command to output it: openssl pkcs12 -export -out output.pkcs12 -inkey key.pem -in cert.pem
            Use with -s (--server-mode) option or with manually specified TLS overlays.
            See moreexamples.md for more info.
        --pkcs12-passwd <pkcs12_passwd>
            Password for --pkcs12-der pkcs12 archive. Required on Mac.

    -p, --preamble <preamble>...
            Prepend copied data with a specified string. Can be specified multiple times.

    -P, --preamble-reverse <preamble_reverse>...
            Prepend copied data with a specified string (reverse direction). Can be specified multiple times.

        --prometheus <prometheus>
            Expose Prometheus metrics on specified IP address and port in addition to running usual Websocat session

        --request-header <request_headers>...
            [A] Specify HTTP request headers for `http-request:` specifier.

    -X, --request-method <request_method>                            [A] Method to use for `http-request:` specifier
        --request-uri <request_uri>                                  [A] URI to use for `http-request:` specifier
        --restrict-uri <restrict_uri>
            When serving a websocket, only accept the given URI, like `/ws`
            This liberates other URIs for things like serving static files or proxying.
    -F, --static-file <serve_static_files>...
            Serve a named static file for non-websocket connections.
            Argument syntax: <URI>:<Content-Type>:<file-path>
            Argument example: /index.html:text/html:index.html
            Directories are not and will not be supported for security reasons.
            Can be specified multiple times. Recommended to specify them at the end or with equal sign like `-F=...`,
            otherwise this option may eat positional arguments
        --socks5-bind-script <socks5_bind_script>
            [A] Execute specified script in `socks5-bind:` mode when remote port number becomes known.

        --socks5-destination <socks_destination>
            [A] Examples: 1.2.3.4:5678  2600:::80  hostname:5678

        --tls-domain <tls_domain>
            [A] Specify domain for SNI or certificate verification when using tls-connect: overlay

        --udp-multicast <udp_join_multicast_addr>...
            [A] Issue IP[V6]_ADD_MEMBERSHIP for specified multicast address. Can be specified multiple times.

        --udp-multicast-iface-v4 <udp_join_multicast_iface_v4>...
            [A] IPv4 address of multicast network interface. Has to be either not specified or specified the same number
            of times as multicast IPv4 addresses. Order matters.
        --udp-multicast-iface-v6 <udp_join_multicast_iface_v6>...
            [A] Index of network interface for IPv6 multicast. Has to be either not specified or specified the same
            number of times as multicast IPv6 addresses. Order matters.
        --udp-ttl <udp_ttl>                                          [A] Set IP_TTL, also IP_MULTICAST_TTL if applicable
        --protocol <websocket_protocol>
            Specify this Sec-WebSocket-Protocol: header when connecting

        --server-protocol <websocket_reply_protocol>
            Force this Sec-WebSocket-Protocol: header when accepting a connection

        --websocket-version <websocket_version>                      Override the Sec-WebSocket-Version value
        --binary-prefix <ws_binary_prefix>
            [A] Prepend specified text to each received WebSocket binary message. Also strip this prefix from outgoing
            messages, explicitly marking them as binary even if `--text` is specified
        --ws-c-uri <ws_c_uri>
            [A] URI to use for ws-c: overlay [default: ws://0.0.0.0/]

        --ping-interval <ws_ping_interval>                           Send WebSocket pings each this number of seconds
        --ping-timeout <ws_ping_timeout>
            Drop WebSocket connection if Pong message not received for this number of seconds

        --text-prefix <ws_text_prefix>
            [A] Prepend specified text to each received WebSocket text message. Also strip this prefix from outgoing
            messages, explicitly marking them as text even if `--binary` is specified

ARGS:
    <addr1>    In simple mode, WebSocket URL to connect. In advanced mode first address (there are many kinds of
               addresses) to use. See --help=types for info about address types. If this is an address for
               listening, it will try serving multiple connections.
    <addr2>    In advanced mode, second address to connect. If this is an address for listening, it will accept only
               one connection.


Basic examples:
  Command-line websocket client:
    websocat ws://ws.vi-server.org/mirror/
    
  WebSocket server
    websocat -s 8080
    
  WebSocket-to-TCP proxy:
    websocat --binary ws-l:127.0.0.1:8080 tcp:127.0.0.1:5678
    

Full list of address types:
    ws://               Insecure (ws://) WebSocket client. Argument is host and URL.
    wss://              Secure (wss://) WebSocket client. Argument is host and URL.
    ws-listen:          WebSocket server. Argument is host and port to listen.
    inetd-ws:           WebSocket inetd server. [A]
    l-ws-unix:          WebSocket UNIX socket-based server. [A]
    l-ws-abstract:      WebSocket abstract-namespaced UNIX socket server. [A]
    ws-lowlevel-client:    [A] Low-level HTTP-independent WebSocket client connection without associated HTTP upgrade.
    ws-lowlevel-server:    [A] Low-level HTTP-independent WebSocket server connection without associated HTTP upgrade.
    wss-listen:         Listen for secure WebSocket connections on a TCP port
    http:               [A] Issue HTTP request, receive a 1xx or 2xx reply, then pass
    asyncstdio:         [A] Set stdin and stdout to nonblocking mode, then use it as a communication counterpart. UNIX-only.
    inetd:              Like `asyncstdio:`, but intended for inetd(8) usage. [A]
    tcp:                Connect to specified TCP host and port. Argument is a socket address.
    tcp-listen:         Listen TCP port on specified address.
    ssl-listen:         Listen for SSL connections on a TCP port
    sh-c:               Start specified command line using `sh -c` (even on Windows)
    cmd:                Start specified command line using `sh -c` or `cmd /C` (depending on platform)
    exec:               Execute a program directly (without a subshell), providing array of arguments on Unix [A]
    readfile:           Synchronously read a file. Argument is a file path.
    writefile:          Synchronously truncate and write a file.
    appendfile:         Synchronously append a file.
    udp:                Send and receive packets to specified UDP socket, from random UDP port  
    udp-listen:         Bind an UDP socket to specified host:port, receive packet
    open-async:         Open file for read and write and use it like a socket. [A]
    open-fd:            Use specified file descriptor like a socket. [A]
    threadedstdio:      [A] Stdin/stdout, spawning a thread (threaded version).
    -                   Read input from console, print to console. Uses threaded implementation even on UNIX unless requested by `--async-stdio` CLI option.
    unix:               Connect to UNIX socket. Argument is filesystem path. [A]
    unix-listen:        Listen for connections on a specified UNIX socket [A]
    unix-dgram:         Send packets to one path, receive from the other. [A]
    abstract:           Connect to UNIX abstract-namespaced socket. Argument is some string used as address. [A]
    abstract-listen:    Listen for connections on a specified abstract UNIX socket [A]
    abstract-dgram:     Send packets to one address, receive from the other. [A]
    mirror:             Simply copy output to input. No arguments needed.
    literalreply:       Reply with a specified string for each input packet.
    clogged:            Do nothing. Don't read or write any bytes. Keep connections in "hung" state. [A]
    literal:            Output a string, discard input.
    assert:             Check the input.  [A]
    assert2:            Check the input. [A]
    seqpacket:          Connect to AF_UNIX SOCK_SEQPACKET socket. Argument is a filesystem path. [A]
    seqpacket-listen:    Listen for connections on a specified AF_UNIX SOCK_SEQPACKET socket [A]
    random:             Generate random bytes when being read from, discard written bytes.
Full list of overlays:
    ws-upgrade:         WebSocket upgrader / raw server. Specify your own protocol instead of usual TCP. [A]
    http-request:       [A] Issue HTTP request, receive a 1xx or 2xx reply, then pass
    http-post-sse:      [A] Accept HTTP/1 request. Then, if it is GET,
    ssl-connect:        Overlay to add TLS encryption atop of existing connection [A]
    ssl-accept:         Accept an TLS connection using arbitrary backing stream. [A]
    reuse-raw:          Reuse subspecifier for serving multiple clients: unpredictable mode. [A]
    broadcast:          Reuse this connection for serving multiple clients, sending replies to all clients.
    autoreconnect:      Re-establish underlying connection on any error or EOF
    ws-c:               Low-level WebSocket connector. Argument is a some another address. [A]
    msg2line:           Line filter: Turns messages from packet stream into lines of byte stream. [A]
    line2msg:           Line filter: turn lines from byte stream into messages as delimited by '\\n' or '\\0' [A]
    foreachmsg:         Execute something for each incoming message.
    log:                Log each buffer as it pass though the underlying connector.
    jsonrpc:            [A] Turns messages like `abc 1,2` into `{"jsonrpc":"2.0","id":412, "method":"abc", "params":[1,2]}`.
    timestamp:          [A] Prepend timestamp to each incoming message.
    socks5-connect:     SOCKS5 proxy client (raw) [A]
    socks5-bind:        SOCKS5 proxy client (raw, bind command) [A]
    crypto:             [A] Encrypts written messages and decrypts (and verifies) read messages with a static key, using ChaCha20-Poly1305 algorithm.
    prometheus:         [A] Account connections, messages, bytes and other data and expose Prometheus metrics on a separate port.
    exit_on_specific_byte:    [A] Turn specific byte into a EOF, allowing user to escape interactive Websocat session

一些注意事项

  • 支持 IPv6,在上下文中将 IP 括在方括号中或直接使用它。
  • Web socket 的使用不是强制性的,您可以在双方使用任何规范。
  • 通常,二进制流中的一行对应一个 WebSocket 文本消息。这可以使用选项进行调整。

局限性

  • 当混合文本和二进制 WebSocket 消息时,不方便。这会影响 mirror: 指定器,使其与 ws://echo.websocket.org 有所不同。有 --binary-prefix--text-prefix--base64 选项来处理二进制和文本的混合。
  • 当前版本的 Websocat 不会收到有关关闭套接字的通知。这使得在没有 -E-u 选项或在反向压力场景中提供服务容易出现套接字泄漏。
  • 未集成 Readline。建议用户使用 rlwrap 工具来包装 websocat,以获得更方便的 CLI。
  • 当前版本的 Websocat 的构建过程没有得到适当自动化,因此比较脆弱。

另请参阅

标签:工具分享, websocket