Nmap neobsahuje mnoho možností výstupního filtrování:--open
omezí výstup na hostitele obsahující otevřené porty (libovolné otevřené porty). -v0
zabrání jakémukoli výstupu na obrazovku.
Místo toho je nejlepším způsobem, jak toho dosáhnout, uložit XML výstup skenování (pomocí -oX
nebo -oA
výstupní možnosti), který bude obsahovat všechny informace shromážděné skenováním ve snadno analyzovatelném formátu XML. Pak to můžete filtrovat pomocí nástrojů pro analýzu XML, aby zahrnovaly informace, které chcete.
Jeden analyzátor XML příkazového řádku je xmlstarlet
. Tento příkaz můžete použít k odfiltrování pouze IP adres pro cíle, které mají sysdescr
obsahující řetězec "example":
xmlstarlet sel -t -m "//port/script[@id='snmpsysdescr' and contains(@output,'example')]/../../../address[@addrtype='ipv4']" -v @addr -n output.xml
Můžete to udělat také pomocí Ndiff, což je nástroj a knihovna Pythonu 2 distribuovaná s 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()
Další knihovny pro analýzu výstupu Nmap jsou dostupné ve většině běžných programovacích jazyků.