Nmap non contiene molto in termini di opzioni di filtraggio dell'output:--open
limiterà l'output agli host contenenti porte aperte (any porte aperte). -v0
impedirà qualsiasi output sullo schermo.
Invece, il modo migliore per farlo è salvare l'output XML della scansione (usando il -oX
o -oA
opzioni di output), che conterrà tutte le informazioni raccolte dalla scansione in un formato XML facile da analizzare. Quindi puoi filtrarlo con gli strumenti di analisi XML per includere le informazioni che desideri.
Un parser XML della riga di comando è xmlstarlet
. Puoi utilizzare questo comando per filtrare solo gli indirizzi IP per le destinazioni che hanno sysdescr
contenente la stringa "example":
xmlstarlet sel -t -m "//port/script[@id='snmpsysdescr' and contains(@output,'example')]/../../../address[@addrtype='ipv4']" -v @addr -n output.xml
Puoi farlo anche con Ndiff, che è uno strumento e una libreria Python 2 distribuita 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()
Altre librerie di analisi Nmap-output sono disponibili nei linguaggi di programmazione più comuni.