介绍与使用

Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」。其功能与有瑞士军刀之称的 Netcat 类似,可以看做是 Netcat 的加强版。

Socat 的主要特点就是在两个数据流之间建立通道,且支持众多协议和链接方式。如 IP、TCP、 UDP、IPv6、PIPE、EXEC、System、Open、Proxy、Openssl、Socket等。

Socat 的官方网站:http://www.dest-unreach.org/socat/

下载编译安装

wget http://www.dest-unreach.org/socat/download/socat-1.7.4.4.tar.gz
tar -zxvf socat-1.7.0.1.tar.gz
cd socat-1.7.0.1
./configure --disable-fips
make && make install

说明:

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

当前版本可能不存在了,有些旧版本服务器会自动删除,所以需要先网页登陆上述网址确认版本是否存在

基本语法

socat [options] <address> <address>
其中这 2 个 address 就是关键了,address 类似于一个文件描述符,Socat 所做的工作就是在 2 个 address 指定的描述符间建立一个 pipe 用于发送和接收数据。几个常用的 address 描述方式如下:

-,STDIN,STDOUT 表示标准输入输出,可以就用一个横杠代替。
/var/log/syslog 打开一个文件作为数据流,可以是任意路径。
TCP:: 建立一个 TCP 连接作为数据流,TCP 也可以替换为 UDP 。
TCP-LISTEN: 建立 一个 TCP 监听端口,TCP 也可以替换为 UDP。
EXEC: 执行一个程序作为数据流。
以上规则中前面的 TCP 等都可以小写,在这些描述后可以附加一些选项,用逗号隔开。如 fork,reuseaddr,stdin,stdout,ctty 等。

应用例子

1UDP方式监听5060端口

[root@taishan-atlas socat-1.7.0.1]# socat udp-recv:5060  stdout
http://www.cmsoft.cn2021/06/18 16:18:45 socat[72757] E sendto(3, 0xab12190, 1, 0, AF=0 "", 0): Invalid argument


2发送UDP数据

2.1往远程192.168.1.80的5060端口

发送数据包hello,可以使用以下命令:

echo “hello” | socat  -   udp4-datagram:192.168.1.80:5060

注意:中间有一个减号(-),左右两边有空格

2.2往本地UDP端口发送数据包

可以使用如下指令

echo “hello” > /dev/udp/192.168.1.81/5060