Nmap no contiene muchas opciones de filtrado de salida:--open
limitará la salida a hosts que contengan puertos abiertos (cualquiera puertos abiertos). -v0
evitará cualquier salida a la pantalla.
En cambio, la mejor manera de lograr esto es guardar la salida XML del escaneo (usando el -oX
o -oA
opciones de salida), que contendrá toda la información recopilada por el escaneo en un formato XML fácil de analizar. Luego puede filtrar eso con herramientas de análisis de XML para incluir la información que desea.
Un analizador XML de línea de comandos es xmlstarlet
. Puede usar este comando para filtrar solo las direcciones IP para los objetivos que tienen sysdescr
que contiene la cadena "ejemplo":
xmlstarlet sel -t -m "//port/script[@id='snmpsysdescr' and contains(@output,'example')]/../../../address[@addrtype='ipv4']" -v @addr -n output.xml
También puede hacer esto con Ndiff, que es una herramienta y una biblioteca de Python 2 distribuida con Nmap:
#!/usr/bin/env python
import ndiff
def sysdescr_contains (value, host):
for port in host.ports:
for script in filter(lambda x: x.id == u"snmp-sysdescr", port.script_results):
if value in script.output:
return True
return False
def usage ():
print """Look for <substring> in snmp-sysdescr output and print matching hosts.
Usage: {} <filename.xml> <substring>"""
if __name__ == "__main__":
import sys
if len(sys.argv) < 3:
usage()
exit(1)
scan = ndiff.Scan()
scan.load_from_file(sys.argv[1])
for host in filter(lambda x: sysdescr_contains(sys.argv[2], x), scan.hosts):
print host.format_name()
Otras bibliotecas de análisis de salida de Nmap están disponibles en los lenguajes de programación más comunes.