检查远程主机/端口是否打开 – 无法使用GNU Netcat或NMap – RHEL 7

在工作中,基础架构团队正在推出安装了RHEL7的新虚拟机作为基础操作系统。 这个特殊的图像来自Netcat的nmap-ncat版本,没有安装NMap。 我们不能在机器上安装任何东西。

以前,我们使用GNU Netcat,它具有-z选项来扫描远程主机/端口以检查它是否打开。 像这样的东西:

 nc -z -v -w 3 remote.host.name 1234 

我怎么能达到同样的检查与新的ncat ,没有-z选项的系统,我不能安装nmap

Bash允许您通过redirect到特殊文件连接到TCP和/或UDP端口:

/dev/tcp/host/port如果host是一个有效的主机名或Internet地址,并且port是一个整数端口号或服务名,Bash将尝试打开相应的TCP套接字。

/dev/udp/host/port如果host是一个有效的主机名或Internet地址,并且port是一个整数端口号或服务名,Bash将尝试打开相应的UDP套接字。

无法打开或创build文件会导致redirect失败。

因此,要testing您是否可以连接到www.example.com上的端口80,应执行以下操作:

 echo -n > /dev/tcp/www.example.com/80 

如果端口被阻塞,您可能会收到“连接被拒绝”消息或超时。

尽pipeNcat还不支持-z ,但您可以通过shellredirect获得相同的行为:

 $ ncat google.com 80 </dev/null >/dev/null && echo "yes" yes $ ncat google.com 81 </dev/null >/dev/null && echo "yes" Ncat: Connection timed out. $ ncat scanme.nmap.org 1234 </dev/null >/dev/null && echo "yes" Ncat: Connection refused. 

连接超时可以使用-w选项进行调整。

编辑: Ncat 7.25BETA2引入了-z选项,它与GNU netcat一样工作,但只在单个端口上。 如果你需要扫描端口范围,你应该使用Nmap。