测试远程系统上的端口是否可访问(无需 telnet)

测试远程系统上的端口是否可访问(无需 telnet)

在过去,我们常常telnet查看远程主机上的端口是否开放:telnet hostname port将尝试连接到任何主机上的任何端口并让您访问原始 TCP 流。

如今,我使用的系统没有安装 telnet(出于安全原因),并且默认情况下所有主机的所有出站连接均被阻止。随着时间的推移,很容易忘记哪些端口对哪些主机开放。

是否有其他方法来测试远程系统上的端口是否开放——使用安装了有限数量软件包的 Linux 系统,并且telnet不可用?

答案1

Bash 已经能够访问TCPUDP端口一段时间。从手册页:

/dev/tcp/host/port
    If host is a valid hostname or Internet address, and port is an integer port number
    or service name, bash attempts to open a TCP connection to the corresponding socket.
/dev/udp/host/port
    If host is a valid hostname or Internet address, and port is an integer port number
    or service name, bash attempts to open a UDP connection to the corresponding socket.

因此你可以使用如下方法:

xenon-lornix:~> cat < /dev/tcp/127.0.0.1/22
SSH-2.0-OpenSSH_6.2p2 Debian-6
^C pressed here

哒哒!

答案2

很好很详细!来自手册页。
单个端口:

nc -zv 127.0.0.1 80

多个端口:

nc -zv 127.0.0.1 22 80 8080

端口范围:

nc -zv 127.0.0.1 20-30

答案3

Netcat 是一个有用的工具:

nc 127.0.0.1 123 &> /dev/null; echo $?

0如果端口 123 已打开或1已关闭,则输出。

答案4

我发现curl可能以类似于 的方式完成工作telnetcurl甚至会告诉您侦听器期望哪种协议。

从主机名和端口构建 HTTP URI 作为 的第一个参数curl。如果curl可以连接,它将报告协议不匹配并退出(如果侦听器不是 Web 服务)。如果curl无法连接,它将超时。

例如,主机 10.0.0.99 上的端口 5672 已关闭或被防火墙阻止:

$ curl http://10.0.0.99:5672
curl: (7) couldn't connect to host

但是,从不同的系统可以访问主机 10.0.0.99 上的端口 5672,并且似乎正在运行 AMQP 侦听器。

$ curl http://10.0.0.99:5672
curl: (56) Failure when receiving data from the peer
AMQP

区分不同的消息很重要:第一次失败是因为curl无法连接到端口。第二次失败是成功测试,尽管curl预期的是 HTTP 侦听器而不是 AMQP 侦听器。

相关内容