首页/系统/Linux 运维命令速查/socat 万能连接转发
网络命令82 条

socat 万能连接转发

两个数据通道的桥接器:TCP-LISTEN 转发到后端、UNIX socket 与 TCP 互转、加 fork 支持并发,比 nc 的语法更工程化。

Linux 运维命令速查系统更新于 2026-10-13

socat 是什么

socat 是「两个数据通道之间的桥」:把标准输入输出、文件、管道、TCP、UDP、UNIX socket、串口等地址类型两两对接,语法统一成 socat 地址1 地址2。它比 nc 更工程化:可选 fork 支持并发连接、reuseaddr 让重启时不被端口占用卡住、-d -d 打印调试日志,因此适合做常驻的小型端口转发、地址类型桥接和连接测试。要注意它只做字节搬运,不做协议转换——HTTP 流量转到数据库端口,对端依然看不懂。

基本信息

适用平台GNU/Linux(发行版包 socat),macOS 需自行安装
语法socat [选项] 地址1 地址2
常用地址TCP-LISTEN:端口、TCP:主机:端口、UDP、UNIX-LISTEN、短横线表示标准输入输出
关键选项fork 支持并发,reuseaddr 允许地址重用,-d -d 打调试日志
常驻托管建议交给 systemd 管理并设置自动重启
能力边界只做字节搬运,不解析或转换协议

典型使用场景

  • 把本机端口转发到另一台机器的服务端口,临时做跳板访问。
  • 把 UNIX socket 暴露成 TCP 端口,方便远程工具连接本机服务。
  • 测试某个端口能否连通:用标准输入直接接到远端端口。
  • 临时把开发机服务暴露给同内网的同事联调。
  • 桥接不同地址类型,例如把串口数据转成 TCP 流。

常用写法

常用写法
socat TCP-LISTEN:8080,fork,reuseaddr TCP:127.0.0.1:80   # 本机 8080 转到 80
socat TCP-LISTEN:3307,fork TCP:10.0.0.9:3306            # 转发数据库端口
socat - TCP:10.0.0.5:80                                 # 标准输入接到远端端口
socat UNIX-LISTEN:/tmp/app.sock,fork TCP:127.0.0.1:9000  # unix socket 转 TCP
socat -d -d TCP-LISTEN:8080,fork TCP:127.0.0.1:80       # 打印调试日志
ss -lntp | grep 8080                                    # 确认监听已建立
pkill -f 'TCP-LISTEN:8080'                              # 用完立即清理临时转发

常用选项对照

选项作用使用要点
TCP-LISTEN监听 TCP 端口不加 fork 只能接一个连接后退出
fork每个连接派生子进程常驻转发必须加,否则只能服务一次
reuseaddr允许地址重用避免重启时报地址已被占用
-d -d打印调试日志连不上时的第一手信息
-v打印数据流内容会记录敏感数据,排查完及时清理
短横线标准输入输出用于一次性的连通性测试
不加 fork 时 socat 只服务一个连接,处理完就退出,典型表现是「第一次能用,之后端口没人听」。常驻转发一定写成 fork,reuseaddr 的组合,并交给 systemd 托管自动重启。
socat 不做协议转换:把 HTTP 请求转发到数据库端口只会得到乱码或被直接断开,它只是把字节原样搬运,协议兼容性完全由两端应用决定。
临时转发用完要立即清理,否则端口长期被占用,后续部署正式服务时报端口冲突,排查方向容易跑偏。可以只监听内网地址,减少暴露面。

易错点

  • 忘记加 fork,第一个连接结束后 socat 就退出,后续访问全部失败且没有明显报错,容易被误判为后端服务故障。
  • 临时转发用完没有清理,端口一直被占用,重启正式服务时报地址已被占用,排查方向跑偏浪费大量时间。
  • 把服务端口经 socat 暴露到公网却没有额外鉴权,等于绕过了原有网络边界;转发只绑内网,并确认上游服务自身有认证。
  • 用 -v 抓数据流排查时忽略它会记录内容,涉及口令与令牌的流量被写进日志文件,事后必须清理并评估影响。

数据来源与参考

  • man 1 socat(socat 官方手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌