На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 13.09.2021 16:24
Привет.
Подскажите что не так делаю?
не работает, ип адреса не добавляются в файл.
Код: Выделить всё
#!/bin/sh
BOTS="APIs-Google|Yahoo!|AdsBot-Google|Applebot|Google Favicon|Googlebot|Mediapartners-Google|FeedFetcher-Google|Google-Read|DuplexWeb-Google|googleweblight|Storebot-Google|YandexBot"
DTD=`egrep "$BOTS" /var/log/nginx/access_log`
for f in "$DTD"
do
IP=`awk ' {print $1} ' "$f" | sort -u`
echo "$IP" > /mnt/bots.txt
done
exit 0
Zer0
Сообщения: 479
ОС: Void, Slackware
Сообщение
Zer0 » 13.09.2021 16:33
bars писал: ↑ 13.09.2021 16:24
ип адреса не добавляются в файл.
А не в файл? В stdout будет их видно? Если
заменить на
Memento mori ... сделай бэкап.
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 13.09.2021 16:41
Zer0 писал(а): ↑ 13.09.2021 16:33
echo "$IP"
не показывает.
Bizdelnick
Модератор
Сообщения: 21235
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 13.09.2021 16:45
awk читает стандартный ввод, а Вы ему аргументом пытаетесь строки подсовывать. И не понял, на кой там sort, если обрабатываете по одной строке. Что он сортировать-то должен?
Делайте всё одним конвейером grep|awk|sort>файл, без цикла. А ещё лучше grep|awk замените на awk '/регулярка/{…}'.
Последний раз редактировалось Bizdelnick 13.09.2021 16:47, всего редактировалось 1 раз.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 13.09.2021 16:45
не работает.
IP=`awk ' {print $1} ' "$f" | sort -u`
В stdout в этом случае видна информация переменной $f.
Но почему переменная $f не обрабатывается, не пойму, запутался уже.
Надо чуть отдохнуть что бы мысли перешли в правильное русло, что то не то сейчас делаю.
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 13.09.2021 16:50
Bizdelnick писал: ↑ 13.09.2021 16:45
awk читает стандартный ввод, а Вы ему аргументом пытаетесь строки подсовывать. И не понял, на кой там sort, если обрабатываете по одной строке. Что он сортировать-то должен?
Делайте всё одним конвейером grep|awk|sort>файл, без цикла. А ещё лучше grep|awk замените на awk '/регулярка/{…}'.
точно.
IP=`echo "$f" | awk '{print $1}'`
Добавлено (17:09):
А как теперь правильно пердать переменную IP для проверки ptr записи ip.
Делаю скрипт для проверки ip адресов на правильный юзер агент.
for f in "$DTD"
do
IP=`echo "$f" | awk '{print $1}'`
PTR=`host "$IP" | egrep -v alias | awk '{print $1,$2}'`
echo "$PTR" > /mnt/bots.txt
done
Хочу сделать файл где будет фигурировать, из лога,
IP - PTR запись домена - юзер агент
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 13.09.2021 19:58
Bizdelnick писал: ↑ 13.09.2021 16:45
Делайте всё одним конвейером grep|awk|sort>файл, без цикла.
Хмм, не думаю что такое возможно сделать без цикла.
По порядку что есть.
Лог файл /var/log/nginx/access_log с содержимым
Код: Выделить всё
50.246.127.57 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0"
5.45.207.152 "Mozilla/5.0 (compatible; YandexImages/3.0; +http://yandex.com/bots)"
Есть задача про парсить лог, отфильтровать ботов белых (яндекс/гугл/маил и т.д.) и добавлением в него реверс зоны ип адреса с юзер агентом.
Код: Выделить всё
5.45.207.152 152.207.45.5.in-addr.arpa "Mozilla/5.0 (compatible; YandexImages/3.0; +http://yandex.com/bots)"
Ломаю голову как лучше сделать.
Без цикла, по отдельности не сложно это сделать, а вот как слепить все 3 переменные ip revers_zone юзер_агент.
Bizdelnick
Модератор
Сообщения: 21235
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 13.09.2021 22:19
bars писал: ↑ 13.09.2021 19:58
как слепить все 3 переменные ip revers_zone юзер_агент
И в чём проблема с кодом, приведённым Вами чуть выше?
bars писал: ↑ 13.09.2021 16:50
for f in "$DTD"
do
IP=`echo "$f" | awk '{print $1}'`
PTR=`host "$IP" | egrep -v alias | awk '{print $1,$2}'`
echo "$PTR" > /mnt/bots.txt
done
Ну кроме того, что на формат выхлопа host я бы полагаться не стал.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 14.09.2021 09:34
Bizdelnick писал: ↑ 13.09.2021 22:19
И в чём проблема с кодом, приведённым Вами чуть выше?
Код: Выделить всё
for f in "$DTD"
do
IP=`echo "$f" | awk '{print $1}'`
PTR=`host $IP | egrep -v alias | awk '{print $1}'`
echo "$PTR" >> /mnt/bots.txt
done
Содержимое файла после запуска скрипта.
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 14.09.2021 11:04
Идите по порядку. Зачем прыгать в продакшен?
Код: Выделить всё
#!/bin/sh
BOTS="APIs-Google|Yahoo!|AdsBot-Google|Applebot|Google Favicon|Googlebot|Mediapartners-Google|FeedFetcher-Google|Google-Read|DuplexWeb-Google|googleweblight|Storebot-Google|YandexBot"
egrep "$BOTS" /var/log/nginx/access_log
Оставьте незакомиченным вот это. Получаете на выходе то что хотите?
Добавлено:
Если все нормально продвигаетесь дальше:
Код: Выделить всё
egrep "$BOTS" /var/log/nginx/access_log | cut -d' ' -f1 | sort -u
И дальше:
Код: Выделить всё
for IP in $(egrep "$BOTS" /var/log/nginx/access_log | cut -d' ' -f1 | sort -u); do
echo ${IP}
done
И т.д.
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 14.09.2021 12:09
Это понятно, можно ип адреса отфильтровать и так.
Код: Выделить всё
egrep "$BOTS" /var/log/nginx/access_log | awk '{print $1}' | sort -u
Но как мне слепить после файл?
Что бы данные соответствовали друг другу.
Такое возможно сделать только в цикле.
По отдельности вытянуть эти данные не трудно, а вот как слепить их в один файл, пока не понимаю как это сделать.
Добавлено (12:14):
Содержимое лога.
Код: Выделить всё
77.88.5.115 "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
66.249.64.82 "Googlebot-Image/1.0"
66.249.64.82 "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
213.180.203.251 "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
66.249.64.82 "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Нужно привести к такому виду.
Код: Выделить всё
77.88.5.115 - 115.5.88.77.in-addr.arpa - "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
66.249.64.82 - 82.64.249.66.in-addr.arpa - "Googlebot-Image/1.0"
66.249.64.82 - 82.64.249.66.in-addr.arpa - "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
213.180.203.251 - 251.203.180.213.in-addr.arpa - "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
66.249.64.82 - 82.64.249.66.in-addr.arpa - "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 14.09.2021 12:53
bars
Покажите полный вывод на вашей системе:
И какая версия awk
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 14.09.2021 13:07
olecya писала: ↑ 14.09.2021 12:53
host 77.88.5.115
host 77.88.5.115
115.5.88.77.in-addr.arpa domain name pointer 77-88-5-115.spider.yandex.com.
awk -version
awk version 20190529 (FreeBSD)
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 14.09.2021 13:16
Попробуйте вот такой вариант, если все правильно перенаправьте вывод в файл:
Код: Выделить всё
#!/bin/bash
BOTS="APIs-Google|Yahoo!|AdsBot-Google|Applebot|Google Favicon|Googlebot|Mediapartners-Google|FeedFetcher-Google|Google-Read|DuplexWeb-Google|googleweblight|Storebot-Google|YandexBot"
awk -v bot="$BOT" '
$0 ~ bot {cmd = "host "$1" | cut -d\" \" -f1"
cmd | getline d
$1 = $1 " - " d " -"
print
close(cmd)
}
' /var/log/nginx/access_log
Bizdelnick
Модератор
Сообщения: 21235
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 14.09.2021 13:59
bars писал: ↑ 14.09.2021 09:34
Код: Выделить всё
for f in "$DTD"
do
IP=`echo "$f" | awk '{print $1}'`
PTR=`host $IP | egrep -v alias | awk '{print $1}'`
echo "$PTR" >> /mnt/bots.txt
done
Содержимое файла после запуска скрипта.
Значит, Вы неправильно разбираете выхлоп host. Очень может быть, что он выглядит вот так:
Shell
% host 5.45.207.152
;; connection timed out; no servers could be reached
%
И, повторюсь, я вообще не стал бы на него завязываться.
Добавлено (14:01):
bars писал: ↑ 14.09.2021 13:07
host 77.88.5.115
115.5.88.77.in-addr.arpa domain name pointer 77-88-5-115.spider.yandex.com.
А на фига Вы берёте отсюда 115.5.88.77.in-addr.arpa? Вам же надо 77-88-5-115.spider.yandex.com.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 14.09.2021 14:34
Bizdelnick писал: ↑ 14.09.2021 13:59
А на фига Вы берёте отсюда 115.5.88.77.in-addr.arpa? Вам же надо 77-88-5-115.spider.yandex.com.
Тогда лучше так:
Вырезать не надо и ошибка не должна выводится
Добавлено (14:41):
Опаньки во фряхе не работает. Одну минутку...
Добавлено (14:47):
bars Какая-то проблема в динамической либе с утилитами dig и nslookup. Не хочу копаться поэтому оставляю проверить работу в вашей системе
bars
Сообщения: 1007
ОС: BSD/LINUX
Сообщение
bars » 14.09.2021 15:33
Bizdelnick писал: ↑ 14.09.2021 13:59
115.5.88.77.in-addr.arpa
Этот выхлоп для чего-то нужен старшему менеджеру проектов.
Добавлено (15:44):
Пока отказался от слияния ip+ptr+user_agenta
User_agent будет в отдельном файле все в вместе.
А ip + ptr.
Код: Выделить всё
DTD=`egrep "$BOTS" /var/log/nginx/access_log | awk '{print $1}' | sort -u`
egrep "$BOTS" /var/log/nginx/access_log > /mnt/mon_bots/all_$DT
for b in $DTD
do
HO=`host $b | egrep -v alias | awk '{print $1" - "$5}'`
echo "$b - $HO" >> /mnt/mon_bots/process_$DT
done
Получилось так.
Код: Выделить всё
77.88.5.48 - 48.5.88.77.in-addr.arpa - 77-88-5-48.spider.yandex.com.
93.158.130.161 - 161.160/27.130.158.93.in-addr.arpa - resizer01sas.resize.yandex.net.
93.158.130.162 - 162.160/27.130.158.93.in-addr.arpa - resizer02sas.resize.yandex.net.
Но все равно мне просто интересно, как или через что лучше сделать слияние переменных $IP $PTR $USER_AG, что бы данные соответствовали друг другу.
Bizdelnick
Модератор
Сообщения: 21235
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 14.09.2021 16:35
bars писал: ↑ 14.09.2021 15:33
Этот выхлоп для чего-то нужен старшему менеджеру проектов.
Это не выхлоп, а вхлоп (запрос, а не ответ). Он формируется из IP-адреса и не содержит никакой информации, которой бы в нём не было. Так что рекомендую воспользоваться советом
olecya , пока нагоняй от страшного манагера не получили.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик