在云主机业务中,比如负载均衡业务场景,需要探测后端服务是否可达,可以使用socat进行tcp和udp端口的探测。
Socat 是一个基于命令行的linux开源程序,通过tcp或者udp的端口建立连接来传输数据。因为流可以由大量不同类型的数据接收器和源构建,并且因为许多地址选项可以应用于流,所以 socat 可以用于许多不同的目的。
socat的命令行如下:
socat [options] <address> <address>
一、tcp端口通信
如在云网络中,云主机vm1和云主机vm2进行网络通信,假设vm1的ipv4地址为192.168.1.3,vm2的ipv4地址为10.1.1.3;vm1的ipv6地址为2001::3,vm2的ipv6地址为 2003:1::2
vm1访问vm2的8080端口,步骤如下
1、在vm2上开启socat的tcp监听服务
ipv4:
socat tcp-listen:8080,reuseaddr,fork EXEC:'echo "vm2 tcp connected"'
//reuseaddr代表地址复用,fork EXEC:'echo "vm2 tcp connected"'表示打印回显为"vm2 tcp connected"
ipv6:
socat tcp6-listen:8080,reuseaddr,fork EXEC:'echo "vm2 tcp6 connected"'
2、在vm1上运行socat 访问vm1的端口8080
ipv4:
socat - tcp-connect:10.1.1.3:8080
指定本地源ip地址和端口如下:
socat - tcp-connect:10.1.1.3:8080,bind=192.168.1.3:5000
ipv6:
socat - tcp6-connect:[2003:1::2]:8080
二、udp端口通信
假设vm1的ipv4地址为192.168.1.3,vm2的ipv4地址为10.1.1.3;vm1的ipv6地址为2001::3,vm2的ipv6地址为 2003:1::2
vm1访问vm2的8000端口,步骤如下
1、在vm2上开启socat的tcp监听服务
ipv4:
socat udp-listen:8000,reuseaddr,fork EXEC:'echo "vm2 udp connected"'
ipv6:
socat udp6-listen:8000,reuseaddr,fork EXEC:'echo "vm2 udp6 connected"'
2、在vm1上运行socat 访问vm1的端口8000
ipv4:
echo "test"|socat - udp-connect:10.1.1.3:8000
ipv6:
echo "test"|socat - udp-connect:[2003:1::2]:8000