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

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

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


当前回答

您也可以使用netcat命令

[location of netcat]/netcat -zv [ip] [port]

or

nc -zv [ip] [port]

-z -设置nc简单地扫描监听守护进程,而不实际发送任何数据给它们。 -v -启用详细模式。

其他回答

tcp是一个开销非常低的好工具。它还有一个timeout参数,以使它更快:

[root@centos_f831dfb3 ~]# tcping 10.86.151.175 22 -t 1
10.86.151.175 port 22 open.
[root@centos_f831dfb3 ~]# tcping 10.86.150.194 22 -t 1
10.86.150.194 port 22 user timeout.
[root@centos_f831dfb3 ~]# tcping 1.1.1.1 22 -t 1
1.1.1.1 port 22 closed.

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

iptables -nL

or

iptables -nL | grep 445
nc -l 8000

其中8000是端口号。如果端口是空闲的,它将启动一个可以轻松关闭的服务器。如果不是,它将抛出一个错误:

nc: Address already in use

下面是一个适用于Mac和Linux的方法:

netstat -aln | awk '$6 == "LISTEN" && $4 ~ "[\\.\:]445$"'

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

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

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