将自定义超时设置为nmblookup

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

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

即使对于未解决的主机,从function性的angular度来看,它也能正常工作。

问题是,当IP地址不可达或远程机器不响应SMB请求时,该命令需要大约十秒钟才能完成。 因此,问题很简单:在这种情况下是否有办法降低stream逝的时间? 换句话说,有没有办法为nmblookup命令设置自定义超时?

注意:我对使用SIGALRM或类似机制的解决scheme感兴趣; 如果它们存在。 Ubuntu 12.04 LTS的nmblookup版本是3.6.3

我只是用

 timeout 1 nmblookup -A $ip_address 

如果运行超过1秒,它会杀死nmblookup。

我不认为if语句会起作用,因为如果没有错误,nmap将返回零,而不pipe任何主机是否打开了端口。 尝试下面的nmap输出parsing,代替你需要的任何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 

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 

我假设你需要testingnetbios-ns 137/udp ,修改testing以使用适当的选项和"${port}"