在Linux上高效地测试端口是否打开?

208

如何从bash脚本中快速找出服务器上端口445是否开放/监听。

我尝试了几种方法,但都想要一些更快的方法:
1. lsof -i :445 (几秒钟内返回)
2. netstat -an |grep 445 |grep LISTEN (几秒钟内返回)
3. telnet (没有返回结果)
4. nmapnetcat在服务器上不可用

最好知道一种不需要枚举和筛选的方法。


1
Netcat 可用吗?如果我没记错的话,它有一个快速失败路径。http://netcat.sourceforge.net/ - JimR
5
使用 netstat -lnt 命令(带有 -t 选项且不带 -a)将只显示正在监听的 TCP 连接。这可能会加快一些速度。如果您不需要 IPv6,可以添加 -4 来仅显示 IPv4。 - Bartosz Moczulski
15
如果输出为空,则表示端口未被使用。原始命令为:netstat -an | grep PORTNUMBER | grep -i listen - automatix
我不知道为什么lsof对你来说很慢,但通常它是你列出的解决方案中最好的。你的netstat解决方案并不是非常可靠(每当你使用grep时都可以猜测;无论如何,如果有人在4450上监听,它都会返回true)。telnetnetcat实际上尝试创建一个连接,这可能并不总是你想要的。 - petersohn
尝试使用在线工具以最快的方式转移详细信息- http://www.yougetsignal.com/tools/open-ports/ - Rohit Suthar
显示剩余2条评论
14个回答

2
您也可以使用netcat命令。最初的回答中提到了这个命令。
[location of netcat]/netcat -zv [ip] [port]

最初的回答
或者
nc -zv [ip] [port]

-z – 将nc设置为仅扫描监听守护程序,而不实际向它们发送任何数据。
-v – 启用详细模式。


最初的回答已经被翻译为中文。

1

tcping 是一个非常轻量级的工具,对系统负担很小。它还有一个超时参数,使得它更快:

[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.

1
不确定是否值得安装tcping,因为Spencer的解决方案不需要额外安装,但这绝对是最干净和最易读的解决方案。 - bdombro

-1

nmap 是正确的工具。 只需使用 nmap example.com -p 80

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


-4
如果您正在使用iptables,请尝试以下操作:
iptables -nL

或者

iptables -nL | grep 445

仅列出iptables规则的内容可能与开放端口没有关联。 - David Goodwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接