Отправляет email-рассылки с помощью сервиса Sendsay

помогите в анализе фйла access.log. создаваемых Webalizer

Я создал сайт, и у меня стал вопрос анализа ключевых
слов с помощью которых на него люди попадают.

Конечно webalizer генерирует html файл где указана
вся статистика и в том числе там есть пункт
"Top 20 of 257 Total Search Strings" - но всвязи с тем что количество по
ситителей на него увеличиваеться ( в мае было зарегистрировано Visits -
874 - это почти в 2 раза больше чем в предыдущем месяце) и поэтому мне
очень надо знать побольше о ключевых словах по которым заходят ко мне.

Я нашел файл access.log. создаваемых Webalizer в котором все эти данные
находяться. Вот фрагмент из этого файла

83.242.135.83 - - [24/May/2005:14:29:25 +0400] "GET /stat/stat17.htm
HTTP/1.0" 200 26868
"http://www.yandex.ru/yandpage?q=1894860320&p=3&ag=d&qs=text%3D%25D7%25
CF%25DA%25C2%25D5%25C4%25C9%25D4%25C5%25CC%25D8%2B%25D3%25C9%25C2%25C9%
25D2%25D3%25CB%25CF%25CA%2B%25D1%25DA%25D7%25D9%26stype%3Dwww"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

Как я понял - крокозяблики это и есть ключевые слова по которым сайт
нашли через яндекс -
и вот мой вопрос - КАК ЭТИ КРОКОЗЯБЛИКИ РАСШИФРОВАТЬ ?? т.е выяснить
что за ними скрываеться.

Хостинг у меня brim.ru
У них стоит Webalizer Version 2.01

Ответить   Супотницкий Сергей Wed, 1 Jun 2005 19:39:41 +0000 (#377716)

 

Ответы:

On Wed, 1 Jun 2005 19:39:41 +0000
Супотницкий Сергей <supotnicki***@y*****.ru> wrote:

Это кодированный URL. Декодируйте при помощи PERL или
PHP. Я нашел, что кодировано дважды. Например,

<? echo urldecode (urldecode
("D%25D7%25CF%25DA%25C2%25D5%25C4%25C9%25D4%25C5%25CC%25D8%2B%25
D3%25C9%25C2%25C9%25D2%25D3%25CB%25CF%25CA%2B%25D1%25DA%25D7%25D
9%26")); ?>

Выдало

возбудитель сибирской язвы

(Господи, что у вас за сайт такой ?! :)))

На Perl это также делается особой функцией (НЕ вручную, ни в
коем случае!!!)

Ответить   Thu, 2 Jun 2005 00:27:17 +0400 (#377861)

 

В сообщении от 1117661237 секунд после начала Эпохи Unix Вы написали:

Почему? Разве это сложно?

$ echo %3D... |perl -p -e 'for $i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}'

Иногда лучше делать вручную, чтобы не создавать зависимости скрипта
от модуля, и/или избежания расходов при его загрузке.

Ответить   Konstantin Korikov Thu, 2 Jun 2005 01:56:29 +0300 (#377925)

 

Уважаемый Konstantin!
Thu, 2 Jun 2005 01:56:29 +0300 Вы писали:

Это долго.

А человеку, который не знает, что при http-GET строки
кодируются [автору исходного письма], это будет очень сложно :-)

В конце концов, это же Perl! Время всегда разумно потратить на
более волнующие вещи ;-)

Ответить   Thu, 2 Jun 2005 09:38:58 +0400 (#378012)

 

Большое спасибо всем кто ответил

У меня что то не получаеться

Ввожу
echo %3D%2B%2B%2B%2B%25CB%25C1%25D2%25D4%25C9%25CE%25D9%2B%25FE%25D5%25CD%25
D9%26stype% |perl -p -e 'for $i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}'
Выводиться
=++++__________________(в этом месте какие то квадратики)stype%

Уважаемый Pafnuty E. Kolov вы написали

А как это сделать, а то я не знаю с какого места начинать

Я работаю в fedora core 2, локаль utf-8

Если кого интересуетесь что за такой жуткий сайт - смотрите -
http://supotnitskiy.webspecialist.ru/

Заранее благодарен

Ответить   Супотницкий Сергей Thu, 2 Jun 2005 21:05:04 +0000 (#378420)

 

В сообщении от 1117735504 секунд после начала Эпохи Unix Вы написали:

Если локаль UTF-8, то нужно перекодировать потом из KOI8-R в UTF-8.

$ echo ... |perl -p -e \
'for$i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' |
iconv -f koi8-r

Ответить   Konstantin Korikov Fri, 3 Jun 2005 17:13:28 +0300 (#378798)

 

[sergei@novcompLIN ~]echo
%3D%2B%2B%2B%2B%25CB%25C1%25D2%25D4%25C9%25CE%25D9%2B%25FE%25D5%25CD%25
D9%26 |perl -p -e 'for$i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' |
iconv -f koi8-r=++++картины+Чумы&
[sergei@novcompLIN ~]

Ура сработало.
Начал высматривать следующие фразы, столкнулся вот с такой ситуацией
Ввожу
[sergei@novcompLIN ~]echo
%FD%E2%EE%EB%FE%F6%E8%FF+%F0%E0%E7%E2%E8%F2%E8%FF+%EF%E8%F9%E5%E2%E0%F0
%E8%F2%E5%EB%FC%ED%EE%E9+%F1%E8%F1%F2%E5%EC%FB+%F7%E5%EB%EE%E2%E5%EA%E0
|perl -p -e 'for$i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' |
iconv -f koi8-r ЩБНКЧЖХЪ+ПЮГБХРХЪ+ОХЫЕБЮПХРЕКЭМНИ+ЯХЯРЕЛШ+ВЕКНБЕЙЮ
Выводяться такие крокозяблики
Но нашел такой путь решения - изменил кодировку

[sergei@novcompLIN ~]echo
%FD%E2%EE%EB%FE%F6%E8%FF+%F0%E0%E7%E2%E8%F2%E8%FF+%EF%E8%F9%E5%E2%E0%F0
%E8%F2%E5%EB%FC%ED%EE%E9+%F1%E8%F1%F2%E5%EC%FB+%F7%E5%EB%EE%E2%E5%EA%E0
|perl -p -e 'for$i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' |
iconv -f cp1251 эволюция+развития+пищеварительной+системы+человека
[sergei@novcompLIN ~]

Уважаемый Константин большое спасибо ВАМ за помощь!!!!

А может есть возможность сделать это (определение кодировки)
автоматически????

Ответить   Супотницкий Сергей Fri, 3 Jun 2005 21:18:55 +0000 (#378890)

 

[sergei@novcompLIN ~]echo
%3D%2B%2B%2B%2B%25CB%25C1%25D2%25D4%25C9%25CE%25D9%2B%25FE%25D5%25CD%25
D9%26 |perl -p -e 'for$i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' |
iconv -f koi8-r=++++картины+Чумы&
[sergei@novcompLIN ~]

Ура сработало.
Начал высматривать следующие фразы, столкнулся вот с такой ситуацией
Ввожу
[sergei@novcompLIN ~]echo
%FD%E2%EE%EB%FE%F6%E8%FF+%F0%E0%E7%E2%E8%F2%E8%FF+%EF%E8%F9%E5%E2%E0%F0
%E8%F2%E5%EB%FC%ED%EE%E9+%F1%E8%F1%F2%E5%EC%FB+%F7%E5%EB%EE%E2%E5%EA%E0
|perl -p -e 'for$i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' |
iconv -f koi8-r ЩБНКЧЖХЪ+ПЮГБХРХЪ+ОХЫЕБЮПХРЕКЭМНИ+ЯХЯРЕЛШ+ВЕКНБЕЙЮ
Выводяться такие крокозяблики
Но нашел такой путь решения - изменил кодировку

[sergei@novcompLIN ~]echo
%FD%E2%EE%EB%FE%F6%E8%FF+%F0%E0%E7%E2%E8%F2%E8%FF+%EF%E8%F9%E5%E2%E0%F0
%E8%F2%E5%EB%FC%ED%EE%E9+%F1%E8%F1%F2%E5%EC%FB+%F7%E5%EB%EE%E2%E5%EA%E0
|perl -p -e 'for$i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' |
iconv -f cp1251 эволюция+развития+пищеварительной+системы+человека
[sergei@novcompLIN ~]

Уважаемый Константин большое спасибо ВАМ за помощь!!!!

А может есть возможность сделать это (определение кодировки)
автоматически????

Ответить   Супотницкий Сергей Fri, 3 Jun 2005 22:47:00 +0000 (#378917)

 

Уважаемый Супотницкий!
Thu, 2 Jun 2005 21:05:04 +0000 Вы писали:

Может, так:

[root@localhost]# cat /var/log/httpd/access_log
127.0.0.1 - - [03/Jun/2005:21:03:57 +0400] "GET
/nk/?q=%C2%D9%DE%C9%CA%20%C3%C5%D0%C5%CE%D8 HTTP/1.1" 200 3873
"-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4.1)
Gecko/20031120 Epiphany/1.0.6"
[root@localhost]# cat /var/www/public_html/dec.php
<?

Header ("Content-type: text/plain");
echo urldecode(urldecode
(join(file("/var/log/httpd/access_log"))));

[root@localhost]# lynx --dump http://127.0.0.1/dec.php
127.0.0.1 - - [03/Jun/2005:21:03:57 0400] "GET /nk/?q=бычий
цепень HTTP/1.1" 2 00 3873 "-" "Mozilla/5.0 (X11; U; Linux i686;
en-US; rv:1.4.1) Gecko/20031120 E piphany/1.0.6"

А может,

[root@localhost]# perldoc -m CGI
[root@localhost]# perldoc -m LWP
[root@localhost]# perldoc -m URI

Что конкретно, я не помню точно :( Как кодировать -- помню:

#! /usr/bin/perl
use URI::URL;
my $url = url('http://www.sibyazva.ru/');

print "\nЗакодировано: $url \n";

А декодировать -- нет. Надо покопаться в Perl Cookbook, там
должно точно освещаться. Впрочем, рыть описания CGI, LWP, URI в
поисках, где декодирование URL уже придумано -- занятие глупое
:-)

Так что даю ручной код:

#! /usr/bin/perl
use URI::URL;
sub urldecode { local($q)=@_;
$q=~s/\+/ /g;
$q=~s/%([0-9a-hA-H]{2})/pack('C',hex($1))/ge;
return $q; }

my $url = url('http://www.sibyazva.ru/');

print "Закодировано: $url\n";
print "Шифр был разгадан: ".urldecode($url)."\n";

Вот видите -- легче самим, чем ковыряться в модулях :-)

Теперь функции urldecode() передадим содержимое
/var/log/httpd/access_log, оп-ля, и все готово.

Ответить   Fri, 3 Jun 2005 21:23:07 +0400 (#378893)

 

Уважаемый Pafnuty E. Kolov большое спасибо Вам
за Ваш ответ

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

Я создал скрипт с таким содержанием, но к сожелению не очень
понял как его использовать

На данный момент я расшифровываю эти крокозяблики так

выявляю нужные мне строчки и отправляю их в отдельный файл
grep "%" access.log >analiz.txt

Полученный файл прогоняю вот так

cat analiz.txt | perl -p -e 'for$
i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' | iconv -f cp1251 > analiz-cp1251.txt

Итого получаеться текст где часть крокозябликов исчезла и
появились нормальные слова,
Что бы разобраться с другой частью крокозябликов я запускаю предыдущую
команду немного по другому

cat analiz.txt | perl -p -e 'for$
i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' | iconv -f koi8-r > analiz-koi8-r.txt

Итого сравния файлы можно прочитать почти все ключевые слова по
которым нашли сайт в интернете, но к сожелению часть слов не поддаеться
- все равно остаються крокозяблики

Я пробовал так

cat analiz.txt | perl -p -e 'for$
i(1,2){s/%([0-9a-f]{2})/chr(hex($1))/gei}' | iconv -f utf8 > analiz-utf.txt
iconv: illegal input sequence at position 135

Но не помогло.

У меня возник еще такой вопрос

Вот допустим у меня есть текст состоящий из таких строчек
213.242.62.45 - - [03/May/2005:18:30:03 +0400] "GET /stat/stat8.htm HTTP/1.1"
200 97212
"http://www.yandex.ru/yandpage?q=1048139104&p=1&ag=d&qs=text=натуральная+оспа&holdreq
=патологическая+анатомия&stype=www" "Mozilla/4.0 (compatible; MSIE 6.0; Windows
NT 5.1)"

Как из такой строчки ( и многих других похожих) удалить все кроме даты, статьи
к которой обратились и ключевых слов - а все остальное убрать?

Ответить   Супотницкий Сергей Mon, 6 Jun 2005 19:41:14 +0000 (#379704)