Saída apenas os endereços IP das máquinas online com nmap

19

Eu sei como usar nmappara encontrar a lista de hosts que estão atualmente online. O que eu gostaria de fazer é obter uma lista apenas dos endereços IP, agora ele exibe informações extras, como

Nmap scan report for 192.168.x.x' and 'Host is up (0.12s latency).

O que eu gostaria é de poder executar um nmapcomando, obter um documento de texto dos endereços IP atualmente online.

Tudo isso é possível?

jasonwryan
fonte

Respostas:

33

Este é comum:

nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up$/{print $2}'

Resumo rápido de opções e comandos:

  • -ndesativa a resolução reversa de nomes, já que você deseja apenas endereços IP. Em uma LAN local, este provavelmente é o passo mais lento também, para que você obtenha um bom aumento de velocidade.
  • -snsignifica "Não faça uma verificação de porta". É o mesmo que o anterior, descontinuado -sPcom a mnemônica "verificação de ping".
  • -oG -envia saída "grepable" para stdout, que é canalizado para awk.
  • /Up$/ seleciona apenas as linhas que terminam com "Para cima", representando hosts que estão online.
  • {print $2} imprime o segundo campo separado por espaço em branco, que é o endereço IP.
bonsaiviking
fonte
Por que ter o $ depois /Up? Eu descobri que o comando nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up/{print $2}'fornece os mesmos resultados.
Michael
1
@ Michael É apenas um nível extra de segurança para garantir que não imprimimos lixo, caso alguma outra coisa contenha a string "Up". Dessa forma, funciona mesmo se você executá-lo na saída grepable em um arquivo de um tipo diferente de verificação, como o -sVque pode conter seqüências imprevisíveis de banners de serviços de rede.
bonsaiviking
3

Você pode canalizá-lo para awk:

nmap -sP 192.168.1.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'
192.168.1.1
192.168.1.10
192.168.1.20
192.168.1.30
jasonwryan
fonte