跳转至

Socat

1. 端口转发与映射

Socat 最常用的功能是将一个端口的流量转发到另一个地址和端口,非常适合调试内网服务或绕过防火墙限制 。

TCP 端口转发:将本地 8080 端口的流量转发到目标服务器的 80 端口。

socat TCP-LISTEN:8080,fork TCP:www.example.com:80
TCP-LISTEN:8080: 监听本地 8080 端口。

fork: 关键参数,表示为每个连接创建一个新的子进程,支持并发连接。如果不加此参数,处理完一个连接后 Socat 就会退出 。 TCP:www.example.com:80: 转发目标地址。

UDP 端口转发:

socat UDP-LISTEN:5353,fork UDP:8.8.8.8:53

2. 开启 Docker Remote API

macOS 上的 Docker Desktop 默认不通过 TCP 暴露 Remote API。可以使用 Socat 将 Docker 的 Unix Socket 映射到 TCP 端口,以便远程工具(如 Portainer 或 IDE 插件)连接 。 ​

socat -d -d TCP-L:2375,fork UNIX-CONNECT:/var/run/docker.sock
UNIX-CONNECT:/var/run/docker.sock: 连接 Docker 的本地 Unix 套接字。

TCP-L:2375: 在本地 2375 端口监听 TCP 请求。 -d -d: 输出详细调试日志,方便排错 。 ​

3. 文件传输

虽然 nc (netcat) 也能传文件,但 Socat 提供了更可靠的流处理,且不需要手动判断结束时间 。 ​ 接收端 (先运行):

socat -u TCP-LISTEN:9999,reuseaddr OPEN:received_file.txt,create

发送端:

socat -u OPEN:local_file.txt TCP:接收端IP:9999
-u: 单向模式(Unidirectional),从左边参数流向右边参数。

reuseaddr: 允许端口复用,防止"端口已被占用"错误 。 ​