Use o awk para imprimir somente o campo IP e portas OPEN

0

Gostaria de imprimir apenas o endereço IP e o campo de portas abertas de um determinado arquivo gnmap.

Host: 123.123.123.123 ()  Ports: 80/open/tcp//http?///, 443/open/tcp//https?///, 8083/closed/tcp//us-srv///, 65001/closed/tcp/////        Ignored State: filtered (65531) Seq Index: 262  IP ID Seq: Randomized
Host: 123.123.123.124 ()  Ports: 80/open/tcp//http?///, 443/open/tcp//https?///, 10443/open/tcp//https///, 65001/closed/tcp/////        Ignored State: filtered (65531) Seq Index: 262  IP ID Seq: Randomized
Host: 123.123.123.125 ()  Ports: 80/open/tcp//http?///, 443/open/tcp//https?///, 8083/closed/tcp//us-srv///, 8445/open/tcp//https///, 65001/closed/tcp/////        Ignored State: filtered (65531) Seq Index: 262  IP ID Seq: Randomized
Host: 123.123.123.126 ()  Ports: 1337/open/tcp//https?///, 8083/closed/tcp//us-srv///, 65001/closed/tcp/////        Ignored State: filtered (65531) Seq Index: 262  IP ID Seq: Randomized

A saída esperada é

123.123.123.123 80/open/tcp//http?///, 443/open/tcp//https?///
123.123.123.124 80/open/tcp//http?///, 443/open/tcp//https?///, 10443/open/tcp//https///
123.123.123.125 80/open/tcp//http?///, 443/open/tcp//https?///

Já experimentei vários comandos diferentes, um dos quais é o comando abaixo.

cat targets_osdetection.gnmap | awk '/open/{print $2 " " $5 " "$6 " " $7}'

Mas apenas imprime os campos correspondentes ao campo $ Number e, como cada IP pode não ter o mesmo número de portas abertas, esse comando não é tão eficiente.

Alguém por favor pode fornecer a solução awk para isso?

    
por DevD 03.07.2018 / 11:00

2 respostas

0
awk '/\/open\//{
  l=$2
  for (i=3;i<=NF;++i) {
    if ($i~/\/open\//) l=l" "$i;
  };
  print l
 }'

Explicação:

Se /open/ corresponder à linha:

  1. Crie uma variável com o IP ( $2 )
  2. Passe pelos campos $3 - NF e adicione o campo à variável se /open/ corresponder.
  3. Imprima a variável.
por 03.07.2018 / 11:12
0

Como você tem um formato de arquivo estático sed , a substituição também fará o trabalho:

sed -E 's/(Host:|Ports:|\(\)) +|[^ ]+closed[^ ]+| +Ignored State:.*//g' targets_osdetection.gnmap

A saída:

123.123.123.123 80/open/tcp//http?///, 443/open/tcp//https?///,  
123.123.123.124 80/open/tcp//http?///, 443/open/tcp//https?///, 10443/open/tcp//https///, 
123.123.123.125 80/open/tcp//http?///, 443/open/tcp//https?///,  8445/open/tcp//https///, 
123.123.123.126 1337/open/tcp//https?///,  
    
por 03.07.2018 / 11:34

Tags