从一个bash脚本如何快速查找端口445是否在服务器上打开/监听。
我已经试过几个办法了,但我想快点: 1. lsof -i:445(需要数秒) 2. netstat -an |grep 445 |grep LISTEN(需要数秒) 3.Telnet(不返回) 4. 服务器上没有Nmap、netcat
知道一种不先枚举然后再grep的方法将会很好。
从一个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。
其他回答
ss -tl4 '( sport = :22 )'
2毫秒够快吗?
添加冒号可以在Linux上工作
如果你使用的是iptables,试试:
iptables -nL
or
iptables -nL | grep 445
基于Spencer Rathbun的回答,使用bash:
true &>/dev/null </dev/tcp/127.0.0.1/$PORT && echo open || echo closed
Nmap是正确的工具。 简单地使用nmap example.com -p 80
您可以从本地或远程服务器使用它。 它还可以帮助您识别防火墙是否正在阻止访问。
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.