Imprima solo las direcciones IP de las máquinas en línea con nmap

19

Sé cómo usarlo nmappara encontrar la lista de hosts que están actualmente en línea. Lo que me gustaría hacer es obtener una lista de solo sus direcciones IP, ahora muestra información adicional como

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

Lo que me gustaría es poder ejecutar un nmapcomando, obtener un documento de texto de las direcciones IP que están actualmente en línea.

¿Es esto posible?

jasonwryan
fuente

Respuestas:

33

Este es uno común:

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

Resumen rápido de opciones y comandos:

  • -ndesactiva la resolución inversa de nombres, ya que solo desea direcciones IP. En una LAN local, este es probablemente el paso más lento también, por lo que obtienes un buen aumento de velocidad.
  • -snsignifica "No hacer un escaneo de puertos". Es lo mismo que el anterior, en desuso -sPcon el mnemónico "escaneo de ping".
  • -oG -envía salida "grepable" a stdout, que se canaliza a awk.
  • /Up$/ selecciona solo líneas que terminan en "Arriba", que representan hosts que están en línea.
  • {print $2} imprime el segundo campo separado por espacios en blanco, que es la dirección IP.
bonsaiviking
fuente
¿Por qué tener el $ después /Up? Encontré que el comando nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up/{print $2}'proporciona los mismos resultados.
Michael
1
@ Michael Es solo un nivel adicional de seguridad para garantizar que no imprimamos basura en caso de que algo más contenga la cadena "Arriba". De esa manera, funciona incluso si lo ejecuta en una salida grepable en un archivo de un tipo diferente de análisis, como el -sVque puede contener cadenas impredecibles de banners de servicios de red.
bonsaiviking
3

Podrías canalizarlo a 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
fuente