[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Определить последнй IP с которого был запрошен URL
mxup
Подскажите плиз, есть ли какие скрипты готовые или можт сам по себе скрипт простой. Вобщем что нужно:
Есть лог apache access.log
88.179.179.179 - - [22/Feb/2013:20:59:02 +0400] "GET /nod072A.nup HTTP/1.1" 200 98457 "-" "ESS Update (Windows; U; 32bit; VDB 13138; BPC 4.2.64.12; OS: 6.1.7601 SP 1.0 NT; TDB 13138; CH 0.0; LNG 1049; x32c; UPD http://nod.updateserver.ru:2221?user-1; APP eav; BEO 1; CPU 14156; ASP 0.10; FW 0.0; PX 0; PUA 1)"
176.105.194.28 - - [22/Feb/2013:21:03:34 +0400] "GET /nod4987.nup HTTP/1.1" 200 819703 "-" "ESS Update (Windows; U; 32bit; VDB 13220; BPC 4.2.64.12; OS: 6.1.7601 SP 1.0 NT; TDB 13220; CH 1.1; LNG 1049; x32c; UPD http://nod.updateserver.ru:2221?user-2; APP eav; BEO 1; CPU 145228; ASP 0.10; FW 0.0; PX 1; PUA 1)"


Нужен такой PHP скрипт который бы выводил (ну например при запросу http://site.ru/script.php) информацию вида:

user-1 - 88.179.179.179
user-2 - 176.105.194.28

То есть скрипт бы искал последние обращения (именно последние) к серверу апач с определённым параметрами (в нашем случае user-1 и user-2) и выводил бы IP с которых происходили эти последние обращения.
Подскажите, есть ли готовые уже решения скриптов? Я прост то даж не представляю как они могут называться. Есть конечно анализаторы логов апача, но они громоздкие и для такой маленькой задачи впринципе хватит несколько строчек на PHP (ну это я так думаю конечно)
Игорь_Vasinsky
обычный парсер
собрать в массив с основными ключами - url - всю оставшуюся информацию со строки

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
mxup
Цитата (Игорь_Vasinsky @ 22.02.2013 - 21:34)
обычный парсер
собрать в массив с основными ключами - url - всю оставшуюся информацию со строки

Спс)
А можт кто для данного кусочке лога покажет скрипт какой примерно должен быть?
Игорь_Vasinsky
ну парсить придётся весь лог

получить файл в массив - построчно
в цикле найти строки с нужным IP

вывести

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
S.Chushkin
"Дело было вечером, делать было нечего" (с) не мой
и решил развлечься... напряг извилину и набросал два варианта, потестировал:
1) короткий
    while (($data = fgetcsv($handle, 0, " ", "\r")) !== false and !empty($data[7])) { //Да, 7 - это у меня. Для ТС будет 6, вроде.
$urls[md5(strtoupper($data[7]))] = array($data[7],$data[0]);
}


2) быстрый
    while(($s = fgets($handle)) !== false) {
$ip = strstr($s,' ',true);
$a = explode('"',$s,3);
list($query,$url) = explode(' ',$a[1]);
if(!empty($url)) {
$urls[md5(strtoupper($url))] = array($url,$ip);
}
}


Собственно и всё. В $urls будет набор уникальных URL с последним IP для него.
п.с. у меня второй в 6 раз быстрее (120000 vs 20000 строк/сек) - fgetcsv жутко медленная

Интересно, а короче/быстрее можно сделать? :/

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.