如何通过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
很高兴知道一种不会先枚举然后在此之后摸索的方式。
我最近发现的一个惊喜是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
要确定是否有人在监听,请尝试通过环回连接。如果失败,则说明该端口已关闭或不允许我们访问。然后,关闭连接。
针对您的用例进行修改,例如发送电子邮件,在失败时退出脚本或启动所需的服务。