Eu apenas uso
timeout 1 nmblookup -A $ip_address
Ele mata o nmblookup se for executado por mais de 1 segundo.
Como parte de um script em lote, tenho o seguinte comando:
hostname=$(nmblookup -A $ip_address | awk '$2 == "<20>" {print $1}')
Que funciona bem a partir de uma perspectiva de funcionalidade, mesmo para hosts não resolvidos.
O problema é que, quando o endereço IP não está acessível ou a máquina remota não responde à solicitação do SMB, o comando leva cerca de dez segundos para ser concluído. Portanto, a questão é simples: existe uma maneira de diminuir o tempo decorrido em tais casos? Ou, em outras palavras, existe uma maneira de definir um tempo limite personalizado para o comando nmblookup
?
OBSERVAÇÃO: estou interessado em soluções que fazem não fazer uso de SIGALRM
ou mecanismos semelhantes; se eles existirem. A versão nmblookup
é 3.6.3
do Ubuntu 12.04 LTS.
Eu não acho que a instrução if funcionará, porque o nmap retorna zero se for executado sem erro, independentemente de qualquer host ter ou não a porta aberta. Tente a seguinte análise da saída do nmap, substituindo o intervalo de endereços IP necessário:
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
Contornar a limitação 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
Suponho que você precisaria testar netbios-ns 137/udp
, modificar o teste para usar as opções apropriadas e "${port}"
.