Eu quero processar programaticamente os resultados da saída do nmap, mas não consigo descobrir como obter a saída e extrair apenas os detalhes das tabelas de protocolo ou porta mostradas nas duas saídas abaixo.
Estou bastante confiante de que posso usar o awk para processar os dados da tabela - mas não posso extrair apenas isso da saída... Que combinação de ferramentas poderia ser usada para fazer isso?
$ sudo nmap --open -sO 10.100.0.14
Starting Nmap 7.70 ( https://nmap.org ) at 2021-12-27 19:15 AEDT
Warning: 10.100.0.14 giving up on port because retransmission cap hit (10).
Nmap scan report for teichos.mydomain.net (10.100.0.14)
Host is up (0.00030s latency).
Not shown: 250 filtered protocols, 1 closed protocol
PROTOCOL STATE SERVICE
1 open icmp
33 open|filtered dccp
80 open|filtered iso-ip
117 open|filtered iatp
136 open|filtered udplite
MAC Address: 6A:3A:ED:33:9E:00 (Unknown)
Saída 2:
$ sudo nmap -sS 10.100.0.14 -p-
Starting Nmap 7.70 ( https://nmap.org ) at 2021-12-27 19:30 AEDT
Nmap scan report for teichos.mydomain.net (10.100.0.14)
Host is up (0.00024s latency).
Not shown: 65533 filtered ports
PORT STATE SERVICE
22/tcp open ssh
9090/tcp open zeus-admin
MAC Address: 6A:3A:ED:33:9E:00 (Unknown)
A saída que estou procurando é a seguinte (os títulos não são essenciais):
PROTOCOL STATE SERVICE
1 open icmp
33 open|filtered dccp
80 open|filtered iso-ip
117 open|filtered iatp
136 open|filtered udplite
e
PORT STATE SERVICE
22/tcp open ssh
9090/tcp open zeus-admin
Com a saída específica que você mostra, podemos simplesmente selecionar todas as linhas que começam com um dígito ou com maiúscula
P
(para os cabeçalhos):Eu criei dois arquivos de texto,
nmap1
enmap2
com as duas saídas da sua pergunta para testar, e obtive:Você também pode fazê-lo
awk
se preferir:O
nmap
utilitário permite a saída de XML facilmente analisável se for dada a-oX
opção, o que significa que você pode recriar a tabela se desejar, ou extrair qualquer informação que você precise.O pipeline abaixo usa
xmlstarlet
para extrair informações do documento XML gerado e recria a tabela encontrada nanmap
saída comum, com uma coluna extra inserida com o "motivo" para o "estado" fornecido.A saída de
nmap
é analisada porxmlstarlet
, que insere#
caracteres (um caractere arbitrário que não esperamos que faça parte da saída) para delimitadores de coluna ecolumn
é usado para criar a tabela alinhada final.Saída de exemplo:
Novamente, mas apenas extraindo as respostas "filtradas":
Saída de exemplo: