Используйте awk для печати только поля IP и OPEN портов

Я хотел бы распечатать только IP-адрес и поле открытых портов из данного файла 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

Ожидаемый результат:

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?///

Я уже пробовал несколько разных команд, одна из которых - команда ниже.

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

Но он печатает только поля, соответствующие полю $ Number, и, поскольку каждый IP-адрес может иметь разное количество открытых портов, эта команда не так эффективна.

Может ли кто-нибудь предоставить для этого awk-решение?

0
03.07.2018, 12:09
2 ответа
awk '/\/open\//{
  l=$2
  for (i=3;i<=NF;++i) {
    if ($i~/\/open\//) l=l" "$i;
  };
  print l
 }'

Пояснение:

Если /open/соответствует строке:

  1. Создать переменную с IP($2)
  2. Перебрать поля$3-NFи добавить поле к переменной, если /open/совпадает.
  3. Распечатать переменную.
0
28.01.2020, 04:19

Поскольку у вас статический формат файла sed, подстановка также подойдет:

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

Выход:

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?///,  
0
28.01.2020, 04:19

Теги

Похожие вопросы