Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #33, АВГУСТ 2003 г.

ПЕРЕКУСИМ ПЕРЛОВКОЙ?

DemiurG (arkhangel@mail.ru)

Спецвыпуск Xakep, номер #033, стр. 033-062-3


$sth = $dbh->prepare (qq {select name from traffik where ip='$ip' order by ip desc}) or die;

$sth->execute;

$name=$sth->fetchrow_array();

print "<div align=right><b><font color=red>[пользователь $name в системе]</font></div>";

А проверка на админа в самом начале:

"if ($name ne "admin")...", хотя это и так понятно в принципе.

Бацая скрипт, я использовал модули: CGI (входит в поставку Perl) - позволяет обращаться к интерфейсу CGI. Через CGI мы получаем ip пользователя:

my $ip=$ENV{REMOTE_ADDR};

через который уже узнаем его имя.

CGI::Carp - выводит сообщение об ошибке прямо в экран браузера. Очень удобно для отладки.

http://search.cpan.org/CPAN/authors/id/L/LD/LDS/CGI.pm-2.97.tar.gz

DBI - интерфейс для работы с базой, может еще потребоваться DBD::MySQL.

http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.37.tar.gz

http://search.cpan.org/CPAN/authors/id/R/RU/RUDY/DBD-mysql-2.9002.tar.gz

Tie::IxHash (http://search.cpan.org/CPAN/authors/id/G/GS/GSAR/Tie-IxHash-1.21.tar.gz) сортирует ключи хэша (это требуется при выводе месяцев, так как они представляют собой хэш и требуется, чтобы февраль шел после января, ну и т.д.):

tie %month, "Tie::IxHash";

%month=('январь'=>"01",

'февраль'=>"02",

'март'=>"03",

'апрель'=>"04",

'май'=>"05",

'июнь'=>"06",

'июль'=>'07',

'август'=>'08',

'сентябрь'=>'09',

'октябрь'=>'10',

'ноябрь'=>'11',

'декабрь'=>'12'

);

Скачать все можно с http://search.cpan.org/. Установка стандартная:

perl Makefile.PL ;

make

make test

make install

Для того чтобы создать таблицу (с уже заполненными данными), я использовал такой нехитрый цикл.

while (@ary = $sth->fetchrow_array())

{

print "<TR>\n";

print ("<TD>", shift (@ary)) while @ary;

print "</TR>\n";

}

В массиве @ary уже есть данные, полученные отсюда:

$sth = $dbh->prepare (qq {select date, mb from traffik where name='$name' and date like '$year-$month-%'}) or die;

$sth->execute();

$ary=$sth->fetchrow_array();

Теперь ты все понял: с помощью скрипта ipastat.pl (а точнее - команды "ipastat -x -R . -n") мы обрабатываем вывод IPA, в результате чего создается (или обновляется) таблица traffik в базе traff2. Юзер заходит на веб-сервер, и благодаря инструкции "my $ip=$ENV{REMOTE_ADDR};" мы узнаем его ip -> ищем последнюю запись в базе по этому ip -> находим -> получаем его имя - и уже делаем выборку по его имени. Если сеть более глобальная и небезопасная, можно к апачу (на котором крутится mysql.cgi) прикрепить аутентификацию, но это уже твое личное дело.

Назад на стр. 033-062-2  Содержание  Вперед на стр. 033-062-4