socat - linux上的转发利器

socat是一个netcat(nc)的替代产品,可以称得上nc++socat的特点就是在两个流之间建立一个双向的 通道。socat的地址类型很多,有ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,等等。看一个例子:

c:\>socat - tcp:192.168.1.18:80

这个命令等同于 nc 192.168.1.18 80。 socat里面,必须有两个流,所以第一个参数-代表标准的输入输出,第二个流连接到192.168.1.1880端口。再看一个反向telnet的例子:

on server:
c:\>socat tcp-listen:23 exec:cmd,pty,stderr

这个命名把cmd绑定到端口23,同时把cmdStderr重定向到stdout

on client:
c:\>socat readline tcp:server:23

连接到服务器的23端口,即可获得一个cmd shellreadlinegnu的命令行编辑器,具有历史功能。

再看文件传递的例子。nc也经常用来传递文件,但是nc有一个缺点,就是不知道文件什么时候传完了,一般要用Ctrl+c来终止,或者估计一个时间,用-w参数来让他自动终止。用socat就不用这么麻烦了:

on host 1:
c:\>socat -u open:myfile.exe,binary tcp-listen:999

on host 2:
c:\>socat -u tcp:host1:999 open:myfile.exe,create,binary

这个命令把文件myfile.exe用二进制的方式,从host 1 传到host 2-u 表示数据单向流动,从第一个参数到第二个参数,-U表示从第二个到第一个。文件传完了,自动退出。

再来一个大家喜欢用的例子。在一个NAT环境,如何从外部连接到内部的一个端口呢?只要能够在内部运行socat就可以了。

外部:
c:\>socat tcp-listen:1234 tcp-listen:3389

内部:
c:\>socat tcp:outerhost:1234 tcp:192.168.12.34:3389

这样,你外部机器上的3389就影射在内部网192.168.12.343389端口上。

socat还具有一个独特的读写分流功能,比如:

c:\>socat open:read.txt!!open:write.txt,create,append tcp-listen:80,reuseaddr,fork

这个命令实现一个假的web server,客户端连过来之后,就把read.txt里面的内容发过去,同时把客户的数据保存到write.txt里面。!!符号用户合并读写流,前面的用于读,后面的用于写。

 

下载地址:http://www.dest-unreach.org/socat/download/

标签: none

添加新评论