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