socat

来自百合仙子's Wiki
跳转到导航 跳转到搜索

输入和输出

终端

-
readline

UNIX 域套接字

UNIX-CONNECT
连接至套接字文件,作为输出端
UNIX-CLIENT
连接至套接字文件,同时作为输入和输出

TLS

监听时,需要指定cert参数。除非使用证书验证,否则服务端需要指定verify=0

socat readline openssl-listen:1111,fork,reuseaddr,cert=cert.pem,verify=0

HTTP 代理 over TLS:

socat tcp-listen:8990,fork,reuseaddr openssl:204.152.214.139:80,cn=t.opera-proxy.net

示例

TCP访问转发到 socket 文件(一次性):

socat tcp-listen:8989 /tmp/mongodb-27017.sock

要多次使用,加上fork参数:

socat tcp-listen:8989,fork /tmp/mongodb-27017.sock

使用bind:addr可以指定 bind 到哪个 IP。

连接到套接字文件并交互(需要编译时启用 readline 支持):

socat READLINE UNIX-CLIENT:/path/to/socket

远程 shell

# server
socat tcp-l:8889,reuseaddr,bind=127.1 exec:'zsh -i',pty,setsid,stderr,sane
# client
stty raw -echo; nc 0 8889; stty cooked echo
socat tcp:127.0.0.1:8889 stdio,raw,echo=0

高速传数据

Linux 网桥会影响单条 TCP 连接的传输速率(约 480Mbps)。使用 SCTP 协议可以避免。不使用 UDP 是因为不能自动断开。

# server
socat -u sctp-l:2233 stdout | command
# client
command | socat -u stdin sctp:192.168.57.2:2233

参见

外部链接