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
时,应注意防火墙规则和权限管理,避免不必要的安全风险。