为 nmblookup 设置自定义超时

为 nmblookup 设置自定义超时

作为批处理脚本的一部分,我有以下命令:

hostname=$(nmblookup -A $ip_address | awk '$2 == "<20>" {print $1}')

从功能角度来看,即使对于未解析的主机,它也能正常工作。

问题是,当 IP 地址无法访问或远程计算机不响应 SMB 请求时,该命令大约需要十秒钟才能完成。因此,问题很简单:有没有办法在这种情况下缩短运行时间?或者换句话说,有没有办法为命令设置自定义超时nmblookup

笔记:我对以下解决方案感兴趣不是使用SIGALRM或类似机制;如果它们存在。nmblookup版本3.6.3来自 Ubuntu 12.04 LTS。

答案1

我只是用

timeout 1 nmblookup -A $ip_address

如果运行超过 1 秒,它会终止 nmblookup。

答案2

我认为 if 语句不会起作用,因为如果 nmap 执行时没有错误,无论任何主机是否打开了端口,它都会返回零。尝试对 nmap 输出进行以下解析,替换您需要的任何 IP 地址范围:

for ip_address in $(nmap -p 137 192.168.0.0/24 -oG - | grep netbios |grep -v closed | awk '{print $2}')
do
        hostname=$(nmblookup -A $ip_address | awk '$2 == "<20>" {print $1}')
        echo "$ip_address: $hostname"
done

答案3

规避nmblookup(1)限制:

if (nmap -p "${port} -sU -P0 "${ip_address}" &> /dev/null); then
  hostname=$(nmblookup -A $ip_address | awk '$2 == "<20>" {print $1}')
else
  printf "Host unreachable.\n"
fi

我假设您需要测试netbios-ns 137/udp,修改测试以使用适当的选项和"${port}"

相关内容