Usar o Nmap como essa é uma maneira bastante precisa de fazer o que você pediu, desde que algumas pré-condições sejam verdadeiras:
- Você deve executar a verificação como raiz (ou Administrador no Windows) para enviar solicitações ARP, não conexões TCP. Caso contrário, a verificação pode relatar um endereço como "inativo" quando ele é simplesmente um firewall.
- Você só pode fazer isso de um sistema no mesmo link de dados (camada 2) que o intervalo de endereços que está digitalizando. Caso contrário, o Nmap precisará usar testes de camada de rede que podem ser bloqueados por um firewall.
Para obter os endereços "disponíveis", você precisa obter a lista de endereços que o Nmap informa como "inativos". Você pode fazer isso com um simples comando awk:
sudo nmap -v -sn -n 192.168.1.0/24 -oG - | awk '/Status: Down/{print $2}'
Resumo das opções do Nmap usadas:
- Quando você usa a opção
-v
, o Nmap imprimirá os endereços que encontrar como "abaixo" além dos que estão "acima". - Em vez de
-sP
, substituí a ortografia mais recente-sn
, que ainda realiza a mesma varredura, mas significa "ignorar a varredura de porta" em vez da "varredura de ping" enganosa (já que a fase de descoberta do host não significa necessariamente um eco de varredura ou Ping ICMP). - A opção
-n
ignora as pesquisas reversas de DNS, o que lhe dá um pouco de tempo, pois você não está interessado em nomes, mas apenas em endereços IP. - A opção
-oG
diz ao Nmap para exibir o formato grepable , que é mais fácil para o awk para processar. O argumento "-
" diz para enviar esta saída para stdout.
O comando awk então procura por "Status: Down" e imprime o segundo campo, contendo o endereço IP.
É claro que, se você tiver acesso às configurações de execução do switch ou às concessões do servidor DHCP, poderá obter essa resposta com muito mais autoridade, sem realizar uma verificação que possa disparar os alarmes de segurança.