Linux下的全能网络工具:socat命令详解

Linux下的全能网络工具:socat命令详解

  1. 简介
    socat(Socket CAT)是 Linux 下的一个强大网络工具,可以看作是 netcat(nc)的增强版。它支持多种协议(TCP、UDP、SSL、UNIX Socket、文件、管道等),能够实现数据流重定向、端口转发、代理、加密通信等功能。
    由于其灵活性和强大的功能,socat 被广泛用于调试网络应用、数据传输、端口映射等场景。

  2. 安装 socat
    在大多数 Linux 发行版中,可以通过包管理器安装:

Debian/Ubuntu

sudo apt install socat

CentOS/RHEL

sudo yum install socat

Arch Linux

sudo pacman -S socat

  1. 基本语法
    socat 的基本语法如下:
    socat [选项] <地址1> <地址2>
    ● 地址格式:协议:参数(如 TCP-LISTEN:8080 或 FILE:/tmp/test.log)
    ● 选项:
    ○ -d:增加调试信息级别(-d -d 更详细)
    ○ -v:显示传输的数据(类似 tcpdump)
    ○ -x:以十六进制显示数据
    ○ -u:单向传输(仅从地址1到地址2)
    ○ -U:单向传输(仅从地址2到地址1)

  2. 常用功能与用例
    (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. 高级用法
    (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 -

  2. 总结
    socat 是一个极其灵活的网络工具,适用于:
    ✅ 端口转发
    ✅ 数据代理
    ✅ 文件传输
    ✅ SSL 加密通信
    ✅ 串口调试
    ✅ Shell 远程访问
    相比于 netcat,socat 支持更多协议和高级功能,是系统管理员和开发者的强大工具。
    推荐阅读:
    ● man socat(查看完整手册)
    ● 官方文档
    希望这篇指南能帮助你掌握 socat!

你可能感兴趣的:(linux,linux,socat)