从 bash 脚本中我如何快速找出端口是否445
在服务器上打开/侦听。
我尝试了几个选项,但我想要快速的东西:
1. lsof -i :445
(需要几秒钟)
2. netstat -an |grep 445 |grep LISTEN
(需要几秒钟)
3. telnet
(它不会返回)
4. nmap
, netcat
在服务器上不可用
很高兴知道一种不先枚举然后再 grep 的方法。
我最近发现的一个惊喜是 Bash 原生支持tcp 连接作为文件描述符 http://tldp.org/LDP/abs/html/devref1.html。使用方法:
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。 5 有时被使用子进程的 Bash http://tldp.org/LDP/abs/html/io-redirection.html,所以 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
要确定是否有人正在监听,请尝试通过环回进行连接。如果失败,则端口将关闭或不允许我们访问。然后,关闭连接。
根据您的用例修改此设置,例如发送电子邮件、失败时退出脚本或启动所需的服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)