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

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

在工作中,基础架构团队正在推出安装了 RHEL7 作为基础操作系统的新虚拟机。此特定映像附带nmap-ncatNetcat 版本,但未安装 NMap。我们无法在机器上安装任何东西。

之前,我们使用 GNU Netcat,它可以-z扫描远程主机/端口以检查其是否打开。如下所示:

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

我怎样才能使用在无法安装的系统上ncat没有该选项的新产品实现相同的检查?-znmap

答案1

Bash 允许你通过重定向到特殊文件来连接到 TCP 和/或 UDP 端口:

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

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

打开或创建文件失败会导致重定向失败。

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

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

如果端口被阻止,您将收到“连接被拒绝”消息或超时。

答案2

尽管 Ncat 尚不支持-z,但您可以通过 shell 重定向获得相同的行为:

$ 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。

答案3

不需要 netcat、telnet 或 nmap。Bash 更简单、可移植且更高效。

打开支票

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" 

开/闭支票

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" || echo "Closed"

端口范围检查

for i in $(seq 80 88); do (>/dev/tcp/example.com/80/$i) &>/dev/null && echo $i Open|| echo $i Closed; done

相关内容