socat(socket cat)是一个基于命令行的实用程序,它建立两个双向字节流并在它们之间传输数据。
有点类似于netcat (即nc命令),nc是单纯面向网络的,socat连接的更多。
Ubuntu 系统上安装socate:
apt install socat
socat可以连接许多不同类型的内容,包括:
命令的基本格式就是 socat 后加可选参数和两个地址:
socat [options] <address> <address>
下边看些具体示例:
socat - TCP4:www.example.com:80
上述命令,把STDIO,也就是标准输入输出(在命令行中,很多命令会把“-”当作STDIO,这不是shell的功能,是程序自己实现的),转发到TCP4协议的主机和端口上。
所以,可以和命令行管道"|"联合使用
socat TCP4-LISTEN:81 TCP4:192.168.1.10:80
上述命令,在本地建立TCP4侦听81端口,转发到192.168.1.10:80端口上,很简单的一个应用层端口转发就实现了。
但是这样只能连接一个连接,支持一个客户端。
socat TCP4-LISTEN:81,fork,reuseaddr TCP4:192.168.1.10:80
上述命令,增加了fork,reuseaddr参数,这样就可以连接多个客户端到81端口,都转发给后边的地址了。
socat FILE:test1.txt,create FILE:test2.txt,create
上述命令,会把test1.txt内容读出写入test2.txt,反过来可以加-U参数。
注:默认双方地址都是以读写权限打开的,-u、-U是单向参数,-u只允许读左侧写入右侧,-U反过来。
socat - PROXY:proxy.example.com:www.baidu.com:80,proxyport=1080
上述命令,把标准输入输出,连接到代理服务器后的百度网站。
注:socat也支持SOCKS4,SOCKS5代理
就到这儿吧,更多示例,见
http://www.dest-unreach.org/socat/doc/socat.html#EXAMPLES
参考:
https://www.redhat.com/en/blog/getting-started-socat
http://www.dest-unreach.org/socat/doc/socat.html