Nmap enthält nicht viele Filteroptionen für die Ausgabe:--open
wird die Ausgabe auf Hosts beschränken, die offene Ports enthalten (alle offene Ports). -v0
verhindert jegliche Ausgabe auf dem Bildschirm.
Stattdessen ist es am besten, die XML-Ausgabe des Scans zu speichern (mithilfe der Datei -oX
oder -oA
Ausgabeoptionen), die alle vom Scan gesammelten Informationen in einem einfach zu analysierenden XML-Format enthalten. Dann können Sie das mit XML-Parsing-Tools filtern, um die gewünschten Informationen einzuschließen.
Ein Befehlszeilen-XML-Parser ist xmlstarlet
. Sie können diesen Befehl verwenden, um nur IP-Adressen für Ziele mit sysdescr
herauszufiltern die die Zeichenkette "Beispiel" enthält:
xmlstarlet sel -t -m "//port/script[@id='snmpsysdescr' and contains(@output,'example')]/../../../address[@addrtype='ipv4']" -v @addr -n output.xml
Sie können dies auch mit Ndiff tun, einem Tool und einer Python 2-Bibliothek, die mit Nmap vertrieben wird:
#!/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()
Andere Nmap-Ausgabe-Parsing-Bibliotheken sind in den meisten gängigen Programmiersprachen verfügbar.