conta as portas abertas correspondentes em um arquivo de log de rede

0

Eu tenho um arquivo de log de rede como este:

Nmap scan report for 192.168.1.51
Host is up.
PORT     STATE    SERVICE
80/tcp   open     http
443/tcp  open     https
8080/tcp open     http-proxy
443/tcp  open     https
8080/tcp open     http-proxy
8082/tcp filtered redcap
8083/tcp filtered https-alt

Nmap scan report for 192.168.1.201
Host is up.
PORT     STATE    SERVICE
80/tcp   open   http
443/tcp  filtered https
8281/tcp filtered http-proxy
8080/tcp open     sedan
8801/tcp filtered https-alt

Nmap scan report for 192.168.1.17
Host is up.
PORT     STATE    SERVICE
80/tcp   closed   http
443/tcp  closed https
9081/tcp open      ecan

Nmap scan report for 192.168.1.10
Host is up.
PORT     STATE    SERVICE
80/tcp   closed   ftp
443/tcp  open   https
9081/tcp open      standard

Eu quero extrair os endereços IP e as contagens de portas abertas para cada endereço IP, então o resultado:

192.168.1.10 - 2
192.168.1.201 - 2
192.168.1.51 - 5
192.168.1.17 - 1
    
por Jeff Schaller 18.10.2018 / 14:54

3 respostas

0

awk solution:

awk 'BEGIN{RS=""; FS="\n"} 
    {split($1,a," "); host[a[5]] = 0; for (i=1; i<=NF; i++) if (match($i,"open") != 0) 
        host[a[5]]++} END{for (each in host) print each " - " host[each]}' file

192.168.1.10 - 2
192.168.1.201 - 2
192.168.1.51 - 5
192.168.1.17 - 1

Nesse comando, o separador de registro RS foi definido para uma linha em branco “” e o separador de campo para uma nova linha \n . Em seguida, awk divide a primeira linha de cada registro e captura o quinto item da matriz de divisão que é relevante para o endereço IP. Depois disso, Awk itera pelos campos restantes NF procurando a sequência "aberta" em cada campo. Quando open estiver presente, ele contará para o endereço IP relevante na matriz de host. Finalmente, awk imprime os resultados.

    
por 18.10.2018 / 15:02
0

Como você parece ter um arquivo de log nmap, se tiver controle sobre a invocação do nmap, considere a opção (reprovada) -oG para criar uma saída greppable. Por exemplo:

$ nmap -oG /tmp/output.txt localhost
$ awk '/^Host: / && /Ports: / { num=gsub("/open/", ""); print $2, "-", num }' < /tmp/output.txt
127.0.0.1 - 6

Isso usa o awk para analisar a saída greppable do nmap; o script awk procura as linhas "Host:" que também contêm a string "Ports:"; em seguida, conta o número de strings "/ open /" e relata esse número para cada host.

    
por 18.10.2018 / 15:14
0

Eu usaria abaixo de awk :

awk 'function output() { print ip, count; count=0 }
     /Nmap/ && count { output() }
     /Nmap/ { ip=$NF }
     /open/ { count++ }
END{ output() }' infile
    
por 18.10.2018 / 15:40