Nmap ne contient pas beaucoup d'options de filtrage de sortie :--open
limitera la sortie aux hôtes contenant des ports ouverts (tous ports ouverts). -v0
empêchera toute sortie à l'écran.
Au lieu de cela, la meilleure façon d'y parvenir est d'enregistrer la sortie XML de l'analyse (en utilisant le -oX
ou -oA
options de sortie), qui contiendra toutes les informations recueillies par l'analyse dans un format XML facile à analyser. Ensuite, vous pouvez filtrer cela avec des outils d'analyse XML pour inclure les informations souhaitées.
Un analyseur XML de ligne de commande est xmlstarlet
. Vous pouvez utiliser cette commande pour filtrer uniquement les adresses IP des cibles qui ont sysdescr
contenant la chaîne "exemple":
xmlstarlet sel -t -m "//port/script[@id='snmpsysdescr' and contains(@output,'example')]/../../../address[@addrtype='ipv4']" -v @addr -n output.xml
Vous pouvez également le faire avec Ndiff, qui est un outil et une bibliothèque Python 2 distribués avec 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()
D'autres bibliothèques d'analyse de sortie Nmap sont disponibles dans la plupart des langages de programmation courants.