socat速查表:运维老司机的救命神器,别再只会nc了!
大家好呀,我是你们的老朋友,一个在运维一线摸爬滚打了快八年的老油条,今天想跟你们唠唠一个我最近越发离不开的工具——socat,顺便整理一份socat速查表,方便你我随时翻出来抄作业。

说真的,早些年我一直靠 nc(netcat)打天下,端口转发、临时监听、调试服务,感觉也能凑合,但后来遇到需要同时处理多连接、SSL 包装、Unix socket 转发这些场景,nc 就开始掉链子了,直到某天同事甩给我一句:“用 socat 啊,nc 的增强版,能打十个。” 我当时还半信半疑,结果一用……嗯,真香!😅
为啥我劝你早点学 socat?
socat 全称是 SOcket CAT,顾名思义,它就是“插座猫”🐱(开个玩笑),它的核心逻辑特别简单:在两个数据流之间建立双向通道,这两个流可以是文件、管道、终端、TCP/UDP 端口、Unix socket,甚至 SSL 加密通道,你可以把它想象成一个万能转接头,什么奇奇怪怪的接口它都能给你接上。
而且最爽的是,它不像 nc 那样一次只能处理一个连接(除非你用 -k),socat 天然支持多连接并发,还能 fork 子进程,运维场景里那些“临时把 A 端口流量导到 B 主机”的脏活累活,它几秒钟就能搞定。
下面这份socat速查表,是我平时用得最多的几个套路,直接抄就行👇
🐱 socat速查表 · 实战常用命令
端口转发(最常用)
socat TCP-LISTEN:8080,fork,reuseaddr TCP:192.168.1.100:80
把本机 8080 端口的流量转发到内网 192.168.1.100 的 80 端口。fork 是关键,不加只能处理一个连接,加了才能扛住并发。reuseaddr 防止重启时报“地址已被占用”。
监听一个端口并输出到终端
socat TCP-LISTEN:9000,reuseaddr -
相当于 nc -l 9000,但更稳,想回显数据就加 -v,调试神器。
Unix socket 转 TCP
socat UNIX-LISTEN:/tmp/my.sock,fork TCP:127.0.0.1:3306
Docker 里经常遇到只暴露 unix socket 的服务,用这招就能让外部通过 TCP 访问,爽歪歪。
SSL 包装(加密通道)
socat OPENSSL-LISTEN:443,cert=server.pem,verify=0,fork TCP:localhost:80
一行命令给后端 HTTP 服务套上 HTTPS,测试环境应急必备。verify=0 表示不验证客户端证书,生产慎用哈。
文件传输
# 接收端 socat TCP-LISTEN:9999 FILE:received.tar.gz # 发送端 socat FILE:send.tar.gz TCP:接收端IP:9999
比 scp 还直接,适合临时倒腾大文件。
执行命令并返回结果
socat TCP-LISTEN:7000,reuseaddr,fork EXEC:/bin/bash
这就是个简易的远程 shell 后门……啊不,是远程管理通道。⚠️ 千万别在生产公网环境乱开,安全第一!
UDP 转发
socat UDP-LISTEN:5353,fork UDP:8.8.8.8:53
DNS 调试、游戏加速场景很好用。
几个容易踩的坑,我帮你踩过了
- fork 一定要加:不加的话第一个连接断开后进程就退出了,你会一脸懵。
- reuseaddr 建议加:不然端口 TIME_WAIT 期间重启会报错。
- 权限问题:监听 1024 以下端口需要 root,或者用
setcap授权。 - 日志调试:加
-d -d -v能打印详细通信内容,排查问题超有用。 - 别裸奔在公网:socat 本身没有认证机制,公网暴露等于送人头,务必配合防火墙或 VPN。
最后唠叨两句
说实话,socat 这玩意儿刚上手时参数确实有点反人类,TCP-LISTEN、OPENSSL-LISTEN、EXEC 这些关键字记不住很正常,所以我建议大家把上面这份socat速查表收藏起来,用的时候直接翻,用个三五次就形成肌肉记忆了💪。
它不像 Nginx、iptables 那样是“正规军”,但在应急排障、临时转发、CTF、内网渗透这些场景里,socat 就是那个能让你少加班半小时的“瑞士军刀”,你还有什么 socat 的骚操作?欢迎评论区交流,咱们一起把这份 socat速查表 补得更全!
下次见啦,记得多喝热水,少熬夜写脚本~ 😴