Uma maneira melhor de listar hosts com um conjunto específico de portas TCP abertas (Linux)

0

Eu quero obter uma lista de todos os hosts da minha rede que tenham as portas 22, 80 e 443 abertas ( todos os três ). Atualmente estou usando dois métodos, ambos têm desvantagens e gostaria de saber se existe uma maneira melhor de que estou perdendo.

1º método :

nmap -PS22 -p22,80,443 192.168.2.\* -oG - | grep "open.*open.*open"
Host: 192.168.2.250 (192.168.2.250) Ports: 22/open/tcp//ssh///, 80/open/tcp//http///, 443/open/tcp//https///

Eu preciso combinar o número de portas com o número de aparências da palavra "aberta". É feia, é longa e sua saída é ainda maior e mais feia.

2º método :

nmap -PS22 -p22,80,443 192.168.2.*
Nmap scan report for 192.168.2.250 (192.168.2.250)
Host is up (0.051s latency).
22/tcp open  ssh
80/tcp open  http
443/tcp open  https

Este é um comando mais simples, mas requer que eu localize visualmente os hosts que possuem 3 linhas de portas abertas, como no exemplo acima. Em uma rede com muitos hosts que têm apenas uma ou duas das três portas abertas, é difícil.

Alguma maneira melhor?

    
por ndemou 04.04.2016 / 09:42

1 resposta

2

Ambos são muito fáceis de analisar. O segundo assim:

nmap -PS22 -p22,80,443 192.168.2.* | awk '/^Nmap scan/ { host = $NF; gsub( /[()]/, "", host) }; /^(22|80|443)/ && $2=="open" { open=open " " $3;  ++cnt}; host && /^$/ { printf "%2s %-20s %s\n", (cnt!=3 ? "!" : "OK"), host, open; host=open=""; cnt=0}'

Isso imprimirá um indicador (OK ou!) na primeira coluna, depois o IP e, finalmente, os nomes dos serviços que encontrar abertos.

    
por 04.04.2016 / 10:10