1

Я смотрю на веб-сайт, который в настоящее время заполняется HTTP-запросами с разных IP-адресов, но все используют одну и ту же строку агента пользователя

Я нашел файл журнала, и теперь у меня есть файл со всеми 2696 уникальными IP-адресами в строке. Похоже, что каждые 20 или около того IP-адресов принадлежат одному и тому же диапазону IP-адресов, т.е. первый, второй и иногда третий октеты одинаковы

Есть ли способ, которым я могу сгруппировать эти IP-адреса вместе, чтобы я мог видеть список каждого диапазона IP-адресов? Или какое-то волшебство командной строки или инструмент, который я могу просто добавить IP-адреса и получить диапазоны IP-адресов в качестве выходных данных?

Редактировать:

Например, 24 из IP-адресов начинаются с 104.140 и имеют три разных третьих октета. 8 IP-адресов начинаются с 104.140.183 , еще 8 начинаются с 104.140.211 а последние 8 начинаются с 104.140.4

Мой менеджер брандмауэра позволяет мне блокировать диапазоны IP-адресов с длиной префикса сети и позволяет выбирать от /24 до /32

Я не знаю достаточно о подсетях, чтобы знать, какими должны быть выходные данные, но я бы хотел A) увидеть, сколько существует различных диапазонов, и B) в идеале иметь выход в формате, который я могу использовать для блокировки диапазонов на брандмауэр

1 ответ1

3

Хорошо, я думаю, что это может сработать для вас - при условии, что у вас установлен awk и IP-адреса находятся в ip.txt:

cat ip.txt | awk 'BEGIN { FS = "." } ; { printf("%s.%s.%s\n%s.%s.%s.%s\n", $1, $2, $3, $1, $2, $3, $4) }' | sort | uniq -c | sort -rn

Небольшое объяснение:

  • кошка печатает файл
  • awk разбивает IP-адреса на 4 переменные и печатает как /24, так и /32 диапазон ip
  • sort сортирует IP-адреса, чтобы мы могли их посчитать
  • uniq считает их (благодаря опции -c) и ставит частоту перед ip-адресом
  • Сортировка помещает их в порядке убывания (-r) частоты (-n интерпретирует значения вместо строки)

Обратите внимание, что показаны как /32, так и диапазоны /24. Если вам просто нужен /32 из диапазона /24, настройте оператор printf(чтобы printf("%s.%s.%sn", $1, $2, $3) только печатал /24 и printf("%s.%s.%s.%s\n", $1, $2, $3, $4) только для печати /32.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .