从一个bash脚本如何快速查找端口445是否在服务器上打开/监听。

我已经试过几个办法了,但我想快点: 1. lsof -i:445(需要数秒) 2. netstat -an |grep 445 |grep LISTEN(需要数秒) 3.Telnet(不返回) 4. 服务器上没有Nmap、netcat

知道一种不先枚举然后再grep的方法将会很好。


当前回答

这里有一个非常简短的“快速回答”:如何测试远程TCP端口是否从Shell脚本打开?

nc -z <host> <port>; echo $?

我使用127.0.0.1作为“远程”地址。

如果端口是开放的,返回“0”,如果端口是关闭的,返回“1”

e.g.

nc -z 127.0.0.1 80; echo $?

-z指定nc只扫描监听守护进程, 没有发送任何数据给他们。使用此选项是错误的 conjunc - 带有-l选项的Tion。

其他回答

我想检查一个linux测试服务器上的端口是否打开。 我可以通过尝试通过telnet从我的开发机器连接到测试服务器来做到这一点。在您的开发机器上尝试运行:

$ telnet test2.host.com 8080
Trying 05.066.137.184...
Connected to test2.host.com

在本例中,我想检查主机test2.host.com上的端口8080是否打开

你可以使用netcat。

nc ip port < /dev/null

连接到服务器,然后直接重新关闭连接。如果netcat不能连接,它将返回一个非零退出码。退出码存储在变量$?举个例子,

nc ip port < /dev/null; echo $?

当且仅当netcat成功连接到端口时返回0。

这里有一个非常简短的“快速回答”:如何测试远程TCP端口是否从Shell脚本打开?

nc -z <host> <port>; echo $?

我使用127.0.0.1作为“远程”地址。

如果端口是开放的,返回“0”,如果端口是关闭的,返回“1”

e.g.

nc -z 127.0.0.1 80; echo $?

-z指定nc只扫描监听守护进程, 没有发送任何数据给他们。使用此选项是错误的 conjunc - 带有-l选项的Tion。

如果你使用的是iptables,试试:

iptables -nL

or

iptables -nL | grep 445

Nmap是正确的工具。 简单地使用nmap example.com -p 80

您可以从本地或远程服务器使用它。 它还可以帮助您识别防火墙是否正在阻止访问。