socat 是一个强大的命令行工具,用于在两个数据流之间建立双向通信。它可以将各种类型的文件描述符(如标准输入/输出、文件、管道、设备等)与网络连接、串口、UNIX套接字等进行连接和转发。
socat 的功能非常广泛,可以用来:
它支持多种协议和地址类型,并且可以通过灵活的选项来实现复杂的网络任务。
socat 的基本语法如下:
socat [options] <address1> <address2>
其中:
address1 和 address2 表示两个需要连接的数据流。options 是可选参数,用于控制行为。例如:
socat TCP4-LISTEN:8080,fork TCP4:localhost:80
上述命令表示监听本地的 8080 端口,并将所有连接转发到 localhost 的 80 端口。
端口转发是 socat 最常见的用途之一。通过端口转发,可以让远程主机访问本地服务,或者让本地主机访问远程服务。
remote_host,其 IP 地址为 192.168.1.100。socat TCP4-LISTEN:8080,fork TCP4:192.168.1.100:80
http://localhost:8080,即可看到 remote_host 上运行的 Web 服务内容。TCP4-LISTEN:8080 表示监听本地的 8080 端口。fork 选项允许同时处理多个连接。TCP4:192.168.1.100:80 表示将数据转发到远程主机的 80 端口。socat 可以用来创建 SSH 隧道,从而安全地转发数据。
remote_host,并且你已经配置了 SSH 访问。ssh -L 8080:localhost:80 user@remote_host
socat 监听 8080 端口并转发数据:
socat TCP4-LISTEN:8080,fork STDIO
http://localhost:8080,即可通过 SSH 隧道访问远程主机上的 Web 服务。socat 支持多重转发,即将数据从一个地址转发到多个目标地址。
socat TCP4-LISTEN:8080,fork SYSTEM:'socat - TCP4:localhost:80 & socat - TCP4:localhost:443'
http://localhost:8080,数据将被同时发送到 80 和 443 端口。SYSTEM 选项允许执行外部命令。& 符号用于并发执行多个命令。除了 TCP,socat 还支持 UDP 数据转发。
socat UDP4-RECVFROM:5000,fork UDP4-SENDTO:localhost:6000
netcat 发送数据到 5000 端口:
echo "Hello, UDP!" | nc -u localhost 5000
nc -u -l 6000
socat 支持多种地址类型,包括 TCP、UDP、UNIX 套接字、串口、文件等。logfile 和 loglevel 选项记录 socat 的运行日志。socat 时,应注意防火墙规则和权限管理,避免不必要的安全风险。