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


17

在工作中,基础架构团队将推出安装了RHEL7作为基本OS的新VM。该特定图像随nmap-ncatNetcat版本一起提供,并且未安装NMap。我们无法在计算机上安装任何东西。

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

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

如何在无法安装的系统上使用新ncat-z选项进行相同的检查nmap


1
为什么要检查端口是否打开/关闭?这是监视解决方案的一部分吗?
ewwhite

1
我们正在努力-z进入Ncat,但是我肯定会暂时不在Red Hat中:github.com/nmap/nmap/pull/444
bonsaiviking

@ewwhite我要检查,如果网络ACL是A点和B点之间。例如开:可以在该应用服务器通话以TCP端口1521的数据库服务器
λ乔纳斯Gorauskas

Answers:


16

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

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


1
您也可以远程登录到端口
Ryan Babchishin

是的,但是RHEL 7中的最小安装不包括始终存在bash的telnet RPM。
HBruijn

2
真?事情如何改变。
Ryan Babchishin

1
@RyanBabchishin加上许多安全准则要求删除telnet客户端,因为使用它登录其他内容并不安全;忽略其大量的故障排除用途。
杰森·马丁

@JasonMartin Pfft
Ryan Babchishin

9

尽管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。


2

不需要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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.