如何使用 socat 测试远程端口是否可达

How to test a remote port is reachable with socat

如何测试 socat 是否可以访问远程端口?

我们可以使用 netcat

nc -zv 192.168.1.15 22

如何使用 socat 做到这一点?

我认为手册页中的第一个示例会起作用

socat - TCP4:www.domain.org:80

对于您的示例,这将是(并添加 2 秒连接超时):

socat - TCP4:192.168.1.15:22,connect-timeout=2

响应将是 sshd 连接横幅(如果它正在监听)

SSH-2.0-OpenSSH_5.3

socat[12650] E connecting to AF=2 192.168.189.6:23: Connection timed out

由于 OP 请求等同于 -z,因此以下 socat 命令将确保它不会等待输入,而只会检查端口是否正在侦听。

socat /dev/null TCP:remote:port

这可以在 Docker 环境中使用,尤其是在 alpine/socat 图像的健康检查中。这是一个示例,它为 smtp 服务设置转发器到 mailhog 服务并检查连接是否已建立

services:
  smtp:
    image: alpine/socat
    command: tcp-listen:25,fork TCP:mailhog:1025
    healthcheck: socat /dev/null TCP:mailhog:1025