Definindo um tempo limite personalizado para nmblookup

3

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.

    
por C2H5OH 26.06.2013 / 15:51

3 respostas

1

Eu apenas uso

timeout 1 nmblookup -A $ip_address

Ele mata o nmblookup se for executado por mais de 1 segundo.

    
por 30.06.2016 / 10:07
3

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
    
por 17.12.2013 / 04:37
0

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}" .

    
por 29.06.2013 / 15:14