Получите список агентов пользователя от журнала nginx

Большинство современных брандмауэров может также прервать начальный SYN-SYN/ACK-ACK к hep, предотвращают атаки типа исчерпания ресурса (т.е. отправьте много SYNs то, чтобы вынуждать сервер поместить запись в ее таблицу соединений и затем никогда не продолжать соединение - для создания этого типа из нападения более агрессивным, эти соединения могут быть от имитировавших IP-адресов).

Вы, возможно, должны открыть соединение и на самом деле запросить данные, чтобы иметь больше обеспечения, что сервер на самом деле (конечно, кэширующий серверы, и другие вещи могли помешать даже этому).

Какой сервер - это? Тип соединения может быть приспособлен к услуге, предложенной сервером. Инструменты как nmap (http://nmap.org/) могут запросить http заголовок, например.

6
задан 1 December 2009 в 14:51
7 ответов
awk -F'"' '/GET/ {print $6}' /var/log/nginx-access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
  • awk(1) - выбор полной Строки агента пользователя ПОЛУЧАЕТ запросы
  • cut(1) - использование первого слова от него
  • sort(1) - сортировка
  • uniq(1) - количество
  • sort(1) - сортировка по количеству, инвертированному

PS. Конечно, это может быть заменено одним awk/sed/perl/python/ и т.д. сценарий. Я просто хотел показать, как богатый путь Unix.

19
ответ дан 2 December 2019 в 23:56
  • 1
    Спасибо, это выглядит интересным. Я сразу испытаю его.:) –  Željko Filipin 2 December 2009 в 13:14
  • 2
    Я пытаюсь заставить Ваш код работать. Вы могли предоставить больше информации о каждой команде? (Я проведу некоторое исследование также.) –  Željko Filipin 3 December 2009 в 12:54
  • 3
    можно использовать man grep, man awk и т.д. –  SaveTheRbtz 3 December 2009 в 17:55
  • 4
    Спасибо, сделает это. Я не был достаточно явным. Единственная вещь, смущающая меня до сих пор, {print $6}, но я предполагаю, что она представляет часть данных в строке. –  Željko Filipin 4 December 2009 в 11:16
  • 5
    Большое спасибо. Я предполагаю, что мой журнал не является стандартным, но я просто должен был измениться на 6$ на 8$ для получения его работа. –  Željko Filipin 31 December 2009 в 16:35

Awstats должен добиться цели, но предоставит намного больше информации. Я надеюсь, что это помогает...

2
ответ дан 2 December 2019 в 23:56
  • 1
    Спасибо, Awstats выглядит подобным Webalizer. Я испытаю его. –  Željko Filipin 1 December 2009 в 16:23
  • 2
    Awstats был к сложному для установки. –  Željko Filipin 3 December 2009 в 12:52

Я использовал бы сценарий оболочки для этого: кошка, awk канал, вид и uniq сделает задание

0
ответ дан 2 December 2019 в 23:56
  • 1
    Спасибо. Я знаю, как проанализировать журналы. Я искал инструмент, который уже знает, как сделать это, таким образом, я не должен писать сценарий. –  Željko Filipin 2 December 2009 в 13:07

Webalizer может сделать это.

Пример:

webalizer -o reports_folder -M 5 log_file
  • -o reports_folder указывает папку, где отчет сгенерирован
  • -M 5 дисплеи только имя браузера и номер основной версии
  • log_file указывает имя файла журнала
  • источник: ftp://ftp.mrunix.net/pub/webalizer/README
2
ответ дан 2 December 2019 в 23:56

В то время как one liner от SaveTheRbtz выполняет свою работу, на анализ моего nginx потребовалось несколько часов. ] журнал доступа.

Вот более быстрая версия на его основе, которая занимает менее 1 минуты на 100 МБ файла журнала (что соответствует примерно 1 миллиону строк):

sed -n 's!.* "GET.* "\([[:alnum:].]\+/*[[:digit:].]*\)[^"]*"$!\1!p' /var/log/nginx/access.log | sort | uniq -c | sort -rfg

Он работает с форматом журнала доступа по умолчанию nginx , который совпадает с объединенным форматом Apache httpd и имеет User-Agent в качестве последнего поля, разделенного ] ".

6
ответ дан 2 December 2019 в 23:56

Это небольшая вариация принятого ответа с использованием fgrep и cut .

cat your_file.log | fgrep '"GET ' | cut -d'"' -f6 | cut -d' ' -f1 | sort | uniq -c | sort -rn

Есть что-то привлекательное в использовании «более слабых» команд когда это возможно.

3
ответ дан 2 December 2019 в 23:56

Чтобы получить пользовательский агент

sudo awk -F"\"" '{print $6}' /var/log/nginx/access.log | sort | uniq -dc
2
ответ дан 17 February 2020 в 06:15

Теги

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