写在前面:

在实际生产中我们经常会遇到到一个场景就是,用一台机器作为转发服务器,连接AB两个网段,将转发服务器的某个端口上的流量转发到B网段的某台机器的某个端口,这样A网段的服务器就可以通过访问转发服务器上的端口访问到B网段的服务器端口。
这样的场景一般在和客户建立专线的连接时候经常用到,一般也可以采用iptables做转发,但是比较复杂,socat可以很轻松的完成这个功能。
socat可以看做netcat(nc)的替代产品,作用是在两个流之间建立双向的通道,且支持众多协议和链接方式:ip,tcp,udp,ipv6,pipe,exec,system,open,proxy,openssl,socket等

一、socat的安装方式:

1.源码方式安装:

socat的官方网站:http://www.dest-unreach.org/socat/
socat源代码包下载地址:http://www.dest-unreach.org/socat/download/
编译安装:
# tar zxf  socat-1.7.2.4.tar.gz
# cd  socat-1.7.2.4
# ./configure   
# make   
# make install  

2.yum方式安装:

# yum install socat

二、主要功能

1.端口转发功能:

格式:
# nohup socat TCP4-LISTEN:访问端口reuseaddr,fork TCP4:192.168.xxx.xxx:转发端口
实例:
开启日志,在本地的监听192.168.162.43网卡的123端口,并将请求转发至192.168.162.44的123端口
# nohup socat  -d -d -lf /var/log/socat.log TCP4-LISTEN:188,bind=192.168.162.43,reuseaddr,fork TCP4:192.168.162.44:123 &
nohup...& :  这个是保证命令可以在后台运行
-d -d -lf /var/log/socat.log :  前面两个连续的-d -d代表调试信息的输出级别,-lf则指定输出信息的保存文件。
TCP4-LISTEN:在本地建立的是一个TCP ipv4协议的监听端口;
bind:指定监听的IP地址,不写这个参数的话将监听服务器上的全部IP
reuseaddr:绑定本地一个端口
fork:设定多链接模式,即当一个链接被建立后,自动复制一个同样的端口再进行监听

2.文件传递功能:

nc也经常用来传递文件,但是nc有一个缺点,就是不知道文件什么时候传完了,一般要用Ctrl+c来终止,或者估计一个时间,用-w参数来让他自动终止。用socat就不用这么麻烦:
192.168.162.43: 
# socat -u open:file,binary tcp-listen:123 
 
192.168.162.44: 
# socat -u tcp:192.168.162.43:123 open:file,create,binary 
-u 表示数据单向流动,这个命令把文件file用二进制的方式,使用123端口(不能是已使用的端口),从192.168.162.43传到192.168.162.44,文件传输完毕,会自动退出。

3.读写分流功能:

socat还具有一个独特的读写分流功能,比如:
# socat open:read.txt!!open:write.txt,create,append tcp-listen:80,reuseaddr,fork 
这个命令实现一个假的web server,客户端连过来之后,就把read.txt里面的内容发过去,同时把客户的数据保存到write.txt里面。”!!”符号用户合并读写流,前面的用于读,后面的用于写。
Last modification:November 7th, 2019 at 03:28 am
如果觉得我的文章对你有用,请随意赞赏