如何通过 bash 脚本快速确定端口 445
是否在服务器上打开/监听。
我已经尝试了几个选项,但我想要一些快速的方法:
1. lsof -i :445
(需要几秒钟)
2. netstat -an |grep 445 |grep LISTEN
(需要几秒钟)
3. telnet
(不返回)
4. nmap
、netcat
在服务器上不可用
很高兴知道一种不先枚举然后再使用 greps 的方式。
最佳答案
我最近发现的一个惊喜是 Bash 原生支持 tcp connections as file descriptors .使用方法:
exec 6<>/dev/tcp/ip.addr.of.server/445
echo -e "GET / HTTP/1.0\n" >&6
cat <&6
我使用 6 作为文件描述符,因为 0,1,2 是标准输入、标准输出和标准错误。 Bash for child processes 有时使用 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
要确定是否有人在收听,请尝试通过环回连接。如果失败,则端口将关闭或不允许我们访问。之后,关闭连接。
根据您的用例修改此设置,例如发送电子邮件、在失败时退出脚本或启动所需的服务。
关于linux - 有效地测试一个端口是否在 Linux 上打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9609130/