подсчитать количество открытых портов в файле сетевого журнала

Если вы обнаружите, что вам нужны более сложные управление файлами, которые вы собираете с помощью grep, чем предлагается в - exclude , вы можете использовать find для создания списка файлов для grep:

$ grep 'Any_you_w ant_to_find '$ (find wherever_you_want_to_search -not -iregex' something_you_want_to_ignore ')

0
18.10.2018, 16:11
3 ответа

awkраствор:

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

В этой команде разделитель записей RSбыл установлен на пустую строку “”, а разделитель полей — на новую строку \n. Затем awkразбивает первую строку каждой записи и захватывает пятый элемент в разделенном массиве, который имеет отношение к IP-адресу. После этого Awkперебирает оставшиеся поля NFв поисках строки «open» в каждом поле. Когда присутствует open, он будет считаться соответствующим IP-адресом в массиве хостов. Наконец, awkвыводит результаты.

0
28.01.2020, 04:12

Поскольку у вас есть файл журнала nmap, если у вас есть контроль над вызовом nmap, рассмотрите (устаревшую)-oGопцию для создания вывода, допускающего сборку. Например:

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

Это использует awk для разбора greppable вывода от nmap; сценарий awk ищет строки «Host :», которые также содержат строку «Ports :»; затем он подсчитывает количество строк «/open/» и сообщает это число для каждого хоста.

0
28.01.2020, 04:12

Я бы использовал ниже awkвместо:

awk 'function output() { print ip, count; count=0 }
     /Nmap/ && count { output() }
     /Nmap/ { ip=$NF }
     /open/ { count++ }
END{ output() }' infile
0
28.01.2020, 04:12

Теги

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