Linux下的全能网络工具:socat命令详解
简介
socat(Socket CAT)是 Linux 下的一个强大网络工具,可以看作是 netcat(nc)的增强版。它支持多种协议(TCP、UDP、SSL、UNIX Socket、文件、管道等),能够实现数据流重定向、端口转发、代理、加密通信等功能。
由于其灵活性和强大的功能,socat 被广泛用于调试网络应用、数据传输、端口映射等场景。
安装 socat
在大多数 Linux 发行版中,可以通过包管理器安装:
sudo apt install socat
sudo yum install socat
sudo pacman -S socat
基本语法
socat 的基本语法如下:
socat [选项] <地址1> <地址2>
● 地址格式:协议:参数(如 TCP-LISTEN:8080 或 FILE:/tmp/test.log)
● 选项:
○ -d:增加调试信息级别(-d -d 更详细)
○ -v:显示传输的数据(类似 tcpdump)
○ -x:以十六进制显示数据
○ -u:单向传输(仅从地址1到地址2)
○ -U:单向传输(仅从地址2到地址1)
常用功能与用例
(1) 简单的 TCP 客户端/服务器
启动 TCP 服务器(监听 8080 端口):
socat TCP-LISTEN:8080,fork -
● fork:允许多个客户端连接
● -:标准输入/输出
客户端连接服务器:
socat TCP:127.0.0.1:8080 -
此时,客户端和服务端可以互相发送数据。
(2) 端口转发(代理)
将本地 8080 端口转发到远程服务器 80 端口:
socat TCP-LISTEN:8080,fork TCP:example.com:80
访问 localhost:8080 相当于访问 example.com:80。
(3) UDP 通信
UDP 服务器(监听 9999 端口):
socat UDP-LISTEN:9999 -
UDP 客户端发送数据:
socat - UDP:127.0.0.1:9999
(4) UNIX Domain Socket 通信
创建 UNIX Socket 服务器:
socat UNIX-LISTEN:/tmp/test.sock -
客户端连接:
socat UNIX:/tmp/test.sock -
(5) 文件传输
将文件内容发送到 TCP 端口:
socat FILE:data.txt TCP:127.0.0.1:8080
接收数据并写入文件:
socat TCP-LISTEN:8080,fork FILE:received.txt
(6) SSL 加密通信
生成自签名证书:
openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365
启动 SSL 服务器:
socat OPENSSL-LISTEN:4433,fork,reuseaddr,cert=cert.pem,key=key.pem,verify=0 -
SSL 客户端连接:
socat - OPENSSL:127.0.0.1:4433,verify=0
(7) 串口通信
读取串口 /dev/ttyUSB0 并输出到终端:
socat FILE:/dev/ttyUSB0,b115200,raw,echo=0 -
● b115200:波特率 115200
● raw:禁用终端处理
(8) 代理 HTTP 流量
将 HTTP 请求转发到另一个服务器:
socat TCP-LISTEN:80,fork TCP:192.168.1.100:8080
访问 localhost:80 相当于访问 192.168.1.100:8080。
(9) 远程 Shell
在服务器上监听并绑定 Shell:
socat TCP-LISTEN:4444,reuseaddr,fork EXEC:/bin/bash
客户端连接后获得 Shell:
socat TCP:127.0.0.1:4444 -
(注意:此操作有安全风险,仅用于测试!)
(10) 数据包捕获(类似 tcpdump)
监听并显示所有经过 eth0 的 HTTP 数据:
socat -u TCP-LISTEN:8080,reuseaddr,fork SYSTEM:“grep --line-buffered HTTP”
高级用法
(1) 多路复用(Multiplexing)
socat 可以结合 fork 和 reuseaddr 处理多个连接:
socat TCP-LISTEN:8080,reuseaddr,fork TCP:backend-server:80
(2) 日志记录
将所有传输的数据记录到文件:
socat -v TCP-LISTEN:8080,fork TCP:example.com:80,creat,append=log.txt
(3) 超时设置
设置连接超时(5秒):
socat TCP:example.com:80,connect-timeout=5 -
总结
socat 是一个极其灵活的网络工具,适用于:
✅ 端口转发
✅ 数据代理
✅ 文件传输
✅ SSL 加密通信
✅ 串口调试
✅ Shell 远程访问
相比于 netcat,socat 支持更多协议和高级功能,是系统管理员和开发者的强大工具。
推荐阅读:
● man socat(查看完整手册)
● 官方文档
希望这篇指南能帮助你掌握 socat!