socat( SOcket CAT )是一个多用途双向套接字数据转接工具。
socat 跟 NetCat 类似,但功能更强大,也更安全(支持 chroot )。它兼容多种协议,支持操作 文件 ( file )、 管道 ( pipe )、 设备 ( device )、 TCP 套接字、 Unix 套接字、 SOCKS 客户端、 CONNECT 代理以及 SSL 等等。
安装
Linux
在 Linux 系统,使用包管理器进行安装,以 Debian/Ubuntu 为例:
|
|
OSX
在 OSX 系统,使用装包神器 brew 进行安装:
|
|
端口转发
TCP
监听本地 80 端口,并将请求转发(代理)到 10.0.0.1:8080 上:
|
|
UDP
监听本地 53 端口,并将请求转发(代理)到 10.0.0.1:5353 上:
|
|
SSL
socat 支持 SSL ,用来解除证书认证非常有用。这个例子在本地监听 143 端口,然后转发到带 SSL 加密服务器 993 端口。这样就可以使用不支持 SSL 的客户端,跟 SSL 服务进行通信:
|
|
当初帮一个读者调试作业,需要解析 IMAP 协议,以为主流邮箱应该都强制 SSH 了。但其实没有,143 端口还是开放的。
文件转发
这个例子监听本地 55555 端口,当有客户端连接上来,就把指定文件发过去:
|
|
还可以结合特殊的设备文件,比如 /dev/null ,得到一个只会关闭连接的 TCP 服务器:
|
|
这个例子通常没啥意义。有一次在调试客户端时,需要验证服务器不按套路出牌,意外关闭连接的场景,就相当用 socat 来实现这个行为。觉得挺有意思的,就记下来。
【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注: