Большинство современных брандмауэров может также прервать начальный SYN-SYN/ACK-ACK к hep, предотвращают атаки типа исчерпания ресурса (т.е. отправьте много SYNs то, чтобы вынуждать сервер поместить запись в ее таблицу соединений и затем никогда не продолжать соединение - для создания этого типа из нападения более агрессивным, эти соединения могут быть от имитировавших IP-адресов).
Вы, возможно, должны открыть соединение и на самом деле запросить данные, чтобы иметь больше обеспечения, что сервер на самом деле (конечно, кэширующий серверы, и другие вещи могли помешать даже этому).
Какой сервер - это? Тип соединения может быть приспособлен к услуге, предложенной сервером. Инструменты как nmap (http://nmap.org/) могут запросить http заголовок, например.
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.
Awstats должен добиться цели, но предоставит намного больше информации. Я надеюсь, что это помогает...
Я использовал бы сценарий оболочки для этого: кошка, awk канал, вид и uniq сделает задание
Webalizer может сделать это.
Пример:
webalizer -o reports_folder -M 5 log_file
-o reports_folder
указывает папку, где отчет сгенерирован-M 5
дисплеи только имя браузера и номер основной версииlog_file
указывает имя файла журнала В то время как 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
в качестве последнего поля, разделенного ] "
.
Это небольшая вариация принятого ответа с использованием fgrep
и cut
.
cat your_file.log | fgrep '"GET ' | cut -d'"' -f6 | cut -d' ' -f1 | sort | uniq -c | sort -rn
Есть что-то привлекательное в использовании «более слабых» команд когда это возможно.
man grep
,man awk
и т.д. – SaveTheRbtz 3 December 2009 в 17:55{print $6}
, но я предполагаю, что она представляет часть данных в строке. – Željko Filipin 4 December 2009 в 11:16