作为批处理脚本的一部分,我有以下命令:
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}"
。