当前位置:首页>Linux>socat:30个命令打通Linux所有数据通道

socat:30个命令打通Linux所有数据通道

  • 2026-10-11 08:28:50
socat:30个命令打通Linux所有数据通道

很多工程师都用过 nc、curl、telnet。但如果你只用过这些工具,那你其实还没有真正掌握 Linux 的数据流世界。在Linux 里有一个工具,可以做到:

  • TCP ↔ TCP

  • TCP ↔ UDP

  • TCP ↔ 文件

  • TCP ↔ Unix Socket

  • TCP ↔ 串口

  • TCP ↔ Shell

  • TCP ↔ SSL

甚至:

终端 ↔ 网络容器 ↔ 本机设备 ↔ 网络

这个工具就是:socat

很多资深工程师都认为:

socat 是 Linux 网络世界的万能连接器。

一句话总结:

socat = connect anything to anything

如果你掌握了socat,你几乎可以打通Linux的所有数据通道。


一、工程师最常见的 4 个痛点

日常开发中经常遇到这些问题:

场景 1:调试端口

服务启动了:curl不通

你怀疑:

  • 服务没启动

  • 端口没监听

  • 网络问题

  • 协议问题

但没有一个工具可以 快速验证数据流。


场景 2:端口转发

例如:

本地8080转发到远程服务器 80

或者:容器端口 → 本地


场景 3:协议转换

例如:

TCP → UDPTCP → UNIX SOCKETSSL → TCP

场景 4:模拟终端或设备

例如:

模拟串口模拟终端模拟设备

这些问题其实都属于同一个本质:数据流连接

而 socat 的核心能力就是:连接任意数据流


二、socat 的核心模型

socat 的设计其实非常简单:

Address A  <---->  Address B

结构:

+------------+        +------------+|  Address A | <----> |  Address B |+------------+        +------------+        \                /         \              /          +------------+          |   socat    |          +------------+

Address 可以是:

TCPUDPSTDINFILEPTYUNIX SOCKETOPENSSLEXECSYSTEM

这意味着:

任何IO都可以互联

三、5 分钟上手 socat

安装

Ubuntu

apt install socat

macOS

brew install socat

CentOS

yum install socat

第一个 socat 程序

创建一个 TCP echo server

socat TCP-LISTEN:1234,fork EXEC:/bin/cat

连接:

nc localhost 1234

输入:

hello

输出:

hello

数据流:

client   |   v+------+| TCP  |+------+   |   v+------+|socat |+------+   |   v/bin/cat

四、30 个工程师最常用 socat 命令

下面这些命令是 生产环境最常见的用法。


一类:端口调试

1 创建 TCP server

socat TCP-LISTEN:8080,fork -

2 TCP client

socat - TCP:example.com:80

手动发送 HTTP:

GET / HTTP/1.1Host: example.com

3 Echo server

socat TCP-LISTEN:2000,fork EXEC:/bin/cat

4 UDP server

socat UDP-LISTEN:9999,fork -

5 UDP client

socat - UDP:127.0.0.1:9999

二类:端口转发

6 本地端口转发

socat TCP-LISTEN:8080,fork TCP:example.com:80

数据流:

client   |localhost:8080   |  socat   |example.com:80

7 HTTPS 转发

socat TCP-LISTEN:8443,fork TCP:example.com:443

8 内网服务暴露

socat TCP-LISTEN:80,fork TCP:127.0.0.1:8080

9 远程端口代理

socat TCP-LISTEN:9000,fork TCP:10.0.0.5:80

三类:文件传输

10 发送文件

socat -u FILE:file.txt TCP:remote:9000

11 接收文件

socat TCP-LISTEN:9000 OPEN:file.txt,creat

12 文件复制

socat FILE:a.txt FILE:b.txt

四类:Unix Socket

13 Unix socket server

socat UNIX-LISTEN:/tmp/test.sock,fork -

14 Unix client

socat - UNIX-CONNECT:/tmp/test.sock

15 TCP ↔ Unix socket

socat TCP-LISTEN:8080,fork UNIX-CONNECT:/tmp/app.sock

架构:

client   | TCP 8080   |  socat   |unix socket   | application

五类:SSL

16 SSL client

socat - OPENSSL:example.com:443

17 SSL server

socat OPENSSL-LISTEN:443,cert=server.pem,key=server.key,fork TCP:127.0.0.1:8080

六类:终端模拟

18 创建伪终端

socat PTY PTY

结构:

app1 |pty1 |socat |pty2 |app2

19 TCP ↔ shell

socat TCP-LISTEN:4444,fork EXEC:/bin/bash

20 串口调试

socat - /dev/ttyUSB0,raw,echo=0

七类:调试神器

21 打印数据流

socat -v TCP-LISTEN:8080,fork TCP:example.com:80输出:> GET / HTTP/1.1< HTTP/1.1 200 OK

22 hex dump

socat -x TCP-LISTEN:8080,fork TCP:example.com:80输出:0000 47 45 54 20

八类:容器调试

23 Kubernetes 端口映射

socat TCP-LISTEN:8080,fork TCP:pod-ip:80

24 Docker socket 代理

socat TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock

九类:工程师骚操作

25 创建 HTTP mock

socat TCP-LISTEN:9000,fork SYSTEM:"echo HTTP/1.1 200 OK"

26 临时 API server

socat TCP-LISTEN:8080,fork EXEC:handler.sh

27 流量镜像

socat TCP-LISTEN:8080,fork TCP:server:80

28 临时反向代理

socat TCP-LISTEN:80,fork TCP:internal:8080

29 CLI HTTP 调试

printf "GET / HTTP/1.0\r\n\r\n" | socat - TCP:example.com:80

30 TCP ↔ 程序

socat TCP-LISTEN:9000,fork EXEC:./app

五、socat 为什么这么强

socat 的核心思想其实非常简单:

Linux 世界只有两种东西:

输入输出

socat 做的事情就是:

read(A)write(B)read(B)write(A)

结构: 

      +------+      |read A|      +------+          |          v      +-------+      |buffer |      +-------+          |          v      +-------+      |write B|      +-------+

反向也是一样。

请在微信客户端打开


六、socat vs nc

很多人问:

socat 和 nc 有什么区别?

简单来说:

nc = 简单 socket 工具socat = IO 框架

能力对比:

功能
nc
socat
TCP
✓
✓
UDP
✓
✓
SSL
✗
✓
文件
✗
✓
Unix socket
✗
✓
PTY
✗
✓
串口
✗
✓

七、真正的高手如何用 socat

很多高级工程师把 socat 用作:

1 网络调试工具

HTTPTCPSSL

2 协议转换器

TCP → UDPTCP → Unix

3 端口代理

微服务调试容器调试

4 设备模拟

串口设备终端设备

八、Linux IO 的一个核心认知

Linux 有一句经典哲学:

Everything is a file

而 socat 背后的哲学是:

Everything is a stream

因此:

文件socket终端串口网络

全部都可以 互相连接。


九、总结

如果你是工程师,我强烈建议掌握 3 个工具:

strace  看系统调用tcpdump 看网络包socat   控制数据流

掌握 socat 后,你几乎可以:

连接 Linux 世界的一切 IO

一句话总结:

socat 是 Linux 数据通道的终极连接器。


文章推荐

netcat:你必须会的Linux网络调试工具

lsof如何揭示Linux一切皆文件的终极真相

最新文章

随机文章