Я хотел бы распечатать только 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-решение?
awk '/\/open\//{
l=$2
for (i=3;i<=NF;++i) {
if ($i~/\/open\//) l=l" "$i;
};
print l
}'
Пояснение:
Если /open/
соответствует строке:
$2
)$3
-NF
и добавить поле к переменной, если /open/
совпадает. Поскольку у вас статический формат файла 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?///,