从 bash 脚本中,我如何快速找出端口是否445在服务器上打开/侦听。
445
我尝试了几个选项,但我想要一些快速的东西: 1. lsof -i :445 (需要几秒钟) 2. netstat -an |grep 445 |grep LISTEN(需要几秒钟) 3. telnet(它不返回) 4 nmap.,netcat在服务器上不可用
lsof -i :445
netstat -an |grep 445 |grep LISTEN
telnet
nmap
netcat
很高兴知道一种不先枚举然后再进行 greps 的方法。
我最近发现的一个惊喜是 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 是标准输入、标准输出和标准错误。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
要确定是否有人在听,请尝试通过环回连接。如果失败,则端口将关闭或不允许我们访问。之后,关闭连接。
针对您的用例进行修改,例如发送电子邮件、在失败时退出脚本或启动所需的服务。