socat是比netcat更可靠灵活的端口转发工具,支持tcp/udp正反向转发、协议转换、ssl加密、日志记录等;基础命令需含fork和reuseaddr,调试加-d -d,生产环境建议加keepalive、timeout和日志。

socat 是 Linux 下比 netcat 更可靠、更灵活的端口转发工具,它能处理并发连接、协议转换、SSL 加密和日志记录等真实场景需求。关键不是堆参数,而是选对模式、配好基础选项,再按需加功能。
基础 TCP 正向转发(最常用)
把本地 8080 端口收到的请求,转给内网服务(比如 192.168.1.100:80):
socat TCP4-LISTEN:8080,fork,reuseaddr TCP4:192.168.1.100:80
- fork:必须加,否则一个连接结束后进程就退出,无法响应第二个请求
- reuseaddr:避免重启时提示 “Address already in use”,尤其调试频繁时很实用
- 用 TCP4 而非 TCP,可明确限定 IPv4,防止 IPv6 绑定失败干扰
带调试与日志的稳定转发
生产或排错环境建议加上诊断能力:
socat -d -d -lf /var/log/socat.log TCP4-LISTEN:3307,fork,reuseaddr,keepalive,timeout=30 TCP4:192.168.10.5:3306
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- -d -d:输出连接建立、数据收发、断开全过程,定位“连得上但没响应”类问题很直接
- -lf:把每条连接的流量摘要记入日志文件,不记录原始数据,兼顾安全与可观测性
- keepalive 和 timeout=30:防中间网络设备静默断连,清理空闲连接,避免堆积
UDP 转发与协议转换
DNS、IoT 设备通信常需 UDP;socat 支持原生 UDP 模式,还能跨协议桥接:
socat UDP4-LISTEN:5353,fork,reuseaddr,so-broadcast UDP4:8.8.8.8:53
- so-broadcast:正确处理广播包,某些 DNS 中继或局域网发现协议依赖它
- 协议转换示例(TCP → UDP):socat TCP4-LISTEN:9000,fork,reuseaddr UDP4-SENDTO:192.168.1.200:9001
HTTPS 透明代理(HTTP 升级)
让客户端用 HTTP 访问,socat 在中间完成 TLS 握手并转为 HTTPS 请求:
socat TCP4-LISTEN:8080,fork,reuseaddr SSL:github.com:443,verify=1,insecure
- SSL: 表示目标走 TLS,verify=1 启用证书校验(生产环境必须)
- insecure 仅测试时用,跳过证书信任链检查;正式部署应配 cafile=/path/to/ca.pem
- 访问
http://localhost:8080,实际发出的是加密 HTTPS 流量到 github.com










