从bash脚本中,我如何快速确定端口445是否在服务器上打开/侦听.

我try 了几个选项,但我想要快速的:

知道一种不先列举,然后再列举的方法会很好.

推荐答案

我最近发现,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是stdin、stdout和stderr.5有时被Bash for child processes人使用,所以3,4,6,7,8和9应该是安全的.

根据下面的 comments ,在脚本中测试local server的听力:

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

要确定是否有人在监听,请try 通过环回连接.如果失败,那么端口将被关闭,或者我们不被允许访问.然后,关闭连接.

根据您的用例修改此选项,例如发送邮箱、失败时退出脚本或启动所需的服务.

Linux相关问答推荐

使用sed替换字符,但如果它是在bash csv文件中的字符串中,则不使用

在PowerShell for Linux上,打印出的maven命令还有其他字符

是否可以在Bash正则表达式中排除?

通过shell 脚本基于AM/PM对日期时间字段进行排序

std::chrono::time_zone 在不同操作系统上不可用

从 MariaDB 连接到 Oracle 时出现错误消息libsqora.so.11.1:找不到文件

为什么 perf stat 不计算 cycles:u 在 BIOS 中禁用超线程的 Broadwell CPU 上?

为什么在 find 命令中使用 dirname 会 for each 匹配项提供点?

/usr/local/bin/ 中Collection的权限被拒绝

Linux 和 I/O 完成端口?

为什么导入 SQL 这么慢?

Linux AMD64 中如何使用 fs/gs 寄存器?

如何找到只对所有者具有特定权限的文件?

如何等待第一个命令完成?

以 qsub 开头的 shell 脚本的参数

如何安装python开发者包?

如何在 UNIX 中将字符串转换为整数

Linux控制台中的模糊文件搜索

svn over HTTP 代理

Linux 上的 NuGet:获取响应流时出错