Вопрос по awk

D
На сайте с 28.06.2008
Offline
980
551

Запрос вида

cat /var/log/nginx/access.bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head

дает вывод


111 95.213.246.202
101 95.213.246.204
64 82.202.205.84
60 82.202.205.82
32 13.66.139.0
11 23.103.64.39
9 178.57.65.193
8 46.243.173.199
7 91.216.3.114
7 193.93.195.233

как сделать тоже самое только без кол-во повторов?

чтобы вывод был просто

95.213.246.202
95.213.246.204
82.202.205.84
82.202.205.82
13.66.139.0
23.103.64.39
178.57.65.193
46.243.173.199
91.216.3.114
193.93.195.233

??

Skom
На сайте с 02.12.2006
Offline
152
#1

uniq без :)

Cras amet qui numquam amavit quique amavit cras amet
D
На сайте с 28.06.2008
Offline
980
#2

что-то не прокатывает


root@m ~ # cat /var/log/nginx/access.bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head
117 95.213.246.202
103 95.213.246.204
66 82.202.205.84
60 82.202.205.82
34 13.66.139.0
12 23.103.64.39
9 178.57.65.193
8 46.243.173.199
7 91.216.3.114
7 46.243.173.84
root@m ~ # cat /var/log/nginx/access.bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq | sort -nr | head
193.93.195.99
193.93.195.90
193.93.195.87
193.93.195.68
193.93.195.67
193.93.195.62
193.93.195.59
193.93.195.51
193.93.195.50
193.93.195.47
root@m ~ # cat /var/log/nginx/access.bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq | sort -nru | head
193.93.193.112
188.68.1.100
185.89.101.100
185.223.160.104
185.14.194.130
185.13.32.104
185.101.68.103
178.57.65.102
178.159.97.100
146.185.202.106
Skom
На сайте с 02.12.2006
Offline
152
#3

А, пардон....

онож сортировку скидывает

Ну, ничего не мешает снова выпилить каунтер...

cat /var/log/nginx/access.bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head | awk '{print $2}'

D
На сайте с 28.06.2008
Offline
980
#4

Теперь то что нужно!!! Спасибо!

---------- Добавлено 31.08.2018 в 23:15 ----------

Skom, сори не дает репу плюсануть, а можно еще вопрос.

Я тут такую конструкцию соорудил

#!/bin/bash
cat /var/log/nginx/access.bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head | awk '{print $2}' > dns.txt

Я хочу обратный DNS-запрос делать для тех IP что в файл записал.

Далее логику работы я вижу такой - каждый из этих IP проверяем командой Host, например

host 95.213.246.202
Host 202.246.213.95.in-addr.arpa. not found: 3(NXDOMAIN)

и т.д. Куда то записываем эти данные, в лог какой-то. Далее сканируем этот лог на наличие в нем

yandex.ru
google.com

Так как IP ботов яндекса и гугла возвращает

host 37.9.113.197
197.113.9.37.in-addr.arpa domain name pointer 37-9-113-197.spider.yandex.com.

host 66.249.76.57
57.76.249.66.in-addr.arpa domain name pointer crawl-66-249-76-57.googlebot.com.

Если при сканировании лога нашли Яндекс или Гугл - шлем уведомление админу.

Как это можно реализовать ?

D
На сайте с 28.06.2008
Offline
980
#5

Все сделал

#!/bin/bash
cat /var/log/nginx/access.zakos_pod_good_bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head | awk '{print $2}' > dns.txt
cat dns.txt | while read line
do
host $line >> result.txt
done
FILEPATH=gootbot.log
egrep -w 'yandex|google' result.txt > $FILEPATH
if [ -s $FILEPATH ]
then
mail -s 'Возможно хороший бот' 444@gmail.com < $FILEPATH
fi
Оптимизайка
На сайте с 11.03.2012
Offline
396
#6

Dram, запись PTR "google.com" можно установить для любого IP. Гадать, "возможно хороший" нет никакого резона, т.к. признаки "хорошего" задокументированы самими ПС. Например, для google:

https://support.google.com/webmasters/answer/80553?hl=ru

Т.е. после обратного резольвинга надо еще раз выполнить прямой, и гадать не придется.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий