O Nmap não contém muitas opções de filtragem de saída: --open
limitará a saída a hosts que contiverem portas abertas ( qualquer portas abertas). -v0
impedirá qualquer saída para a tela.
Em vez disso, a melhor maneira de fazer isso é salvar a saída XML da verificação (usando as opções -oX
ou -oA
output), que conterão todas as informações reunidas pela varredura em um formato XML de fácil análise. Em seguida, você pode filtrar isso com ferramentas de análise XML para incluir as informações desejadas.
Um analisador de XML de linha de comando é xmlstarlet
. Você pode usar esse comando para filtrar apenas os endereços IP dos destinos que têm sysdescr
contendo a string "example":
xmlstarlet sel -t -m "//port/script[@id='snmpsysdescr' and contains(@output,'example')]/../../../address[@addrtype='ipv4']" -v @addr -n output.xml
Você também pode fazer isso com Ndiff , que é uma ferramenta e uma biblioteca do Python 2 distribuída com o 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()
Outras bibliotecas de análise de saída do Nmap estão disponíveis nas linguagens de programação mais comuns.