一尘不染

有效测试Linux是否打开了端口?

linux

如何通过bash脚本快速确定445服务器上端口是否处于打开/侦听状态。

我已经尝试了几个选项,但我想要的东西快:
1 lsof -i :445 (只需几秒钟)
2. netstat -an |grep 445 |grep LISTEN(只需几秒钟)
3. telnet(不返回)
4 nmapnetcat不可用在服务器上

很高兴知道一种不会先枚举然后在此之后摸索的方式。


阅读 309

收藏
2020-06-02

共1个答案

一尘不染

我最近发现的一个惊喜是Bash本身支持tcp连接作为文件描述符。使用方法:

exec 6<>/dev/tcp/ip.addr.of.server/445
echo -e "GET / HTTP/1.0\n" >&6
cat <&6

我使用6作为文件描述符,因为0,1,2是stdin,stdout和stderr。Bash有时会将5用作子进程,因此3,4,6,7,8和9应该是安全的。

根据下面的注释,要测试是否在脚本中侦听 本地服务器

exec 6<>/dev/tcp/127.0.0.1/445 || echo "No one is listening!"
exec 6>&- # close output connection
exec 6<&- # close input connection

要确定是否有人在监听,请尝试通过环回连接。如果失败,则说明该端口已关闭或不允许我们访问。然后,关闭连接。

针对您的用例进行修改,例如发送电子邮件,在失败时退出脚本或启动所需的服务。

2020-06-02