Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Общалка aka Флуд _ Хаблисты

Автор: Nickolya 6.10.2008, 21:55

Вопросы по порядку:

  1. Народ, кто знает какие хаблисты, акромя знаменитого dchublist.ru?
  2. Какие функции нужны публичному хаблисту?
  3. Что если нам сделать свой хаблист?
  4. Как думаете, это трудно? big_smile.gif
  5. Кто поможет?))
  6. Я совсем спятил?

Автор: *FoxMalder* 6.10.2008, 22:10

я выбираю 6 big_smile.gif

Автор: Nickolya 6.10.2008, 22:16

Это не варианты ответов, а вопросы на которые я хотел бы почитать Ваши ответы baffle.gif ah.gif big_smile1.gif laughing.gif laughing.gif laughing.gif

Автор: Setuper 6.10.2008, 22:21

В принципе можно сделать, но не думаю, что он будет популярнее, чем dchublist

Автор: mariner 6.10.2008, 22:29

ну а софтина на перле мною замечена big_smile.gif

Автор: Nickolya 6.10.2008, 23:10

Отлично, не бросили наши программеры big_smile.gif На хостинге есть перл, так что выкладывай, но в нем я просто нуп. :(

Есть еще такая идея: как-то было дело, я делал еще на 0352 на библиотеке сокетов что-то вроде клиента при помощи луа, может заставить хаб обрабатывать хаблист отдельно дабы не нагружать серв на хостинге, потом загружать данные на сервер (можно либо по фтп, либо запросом к пхп скрипту, а можно совместить, главное - придумать КАК сделать). Скрипт спокойно заходил на хаб, мог даже выдавать пароль, получал файл-лист и прочее, был даже тестовый вариант хаблинка на луа... Как вам такая идея? (на луа я такое быстро сделаю)))

Потом что касается функционала хаблиста: объединяем с базой зарегистрированных ползователей хаба, чтобы каждый мог добавлять, а затем изменять свой хаб(ы), добавление требует ручного подтверждения адином; различные выводы списка хабов: по шаре, юзерам, хабу, дате добавления и т.п., комментарии или обсуждение каждого хаба, вот что хотелось бы мне для начала big_smile.gif Конечно не всё сразу...

Насчет дизайна надеюсь поможет нам наш любимый Svyat, который куда-то далеко-далеко пропал, но я попробую потревожить... big_smile1.gif

Автор: mariner 7.10.2008, 6:08

ок. Как найду софтину - выложу big_smile.gif

Автор: BIMMER71 7.10.2008, 14:57

вот скрипт хаблиста

 hubscan_20060826.tar.gz ( 8.85 килобайт ) : 129
 

Автор: *FoxMalder* 7.10.2008, 19:38

расскажи как он работает как его подключить и как это все выглядит в конечном варианте big_smile.gif

Автор: BIMMER71 7.10.2008, 20:05

Если честно сам незнаю) Просто нашел в недрах жёсткого диска=)

Автор: *FoxMalder* 8.10.2008, 3:35

ну так что некто не в курсе как его ставить или хотя бы где про это можно почитать?

Автор: mariner 9.10.2008, 0:16

ставить это под линукс, с апачем с пыхой и мускулем в придачу. Выполнять по крону ;) в принципе можно такое и в винде замутить..... Но тож нужен перл + апач + пых + мускул

Автор: sintesis 9.10.2008, 14:38

Цитата(Nickolya @ 6.10.2008, 21:55) *
Что если нам сделать свой хаблист?

А какой смысл? Только распылять силы. Лучше попинать хаблист.ру, чтобы они приделали нужное.

Автор: Nickolya 9.10.2008, 16:26

Очень жаль что тема не разворачивается полноценно, задано 6 вопросов, а обсуждаем максимум 2...
Про смысл: во-первых меня не очень устраивает функционал этого хаблиста, даже элементарного поиска по хабам нет, во-вторых уже бы давно сделали всё это, сайту же уже не 1 год, но почему-то этого нет, еще меня не особо устраивает время обнолвения хабов, раз в 4 часа - не особо актуально, хотя может и нормально, откуда мне знать?) baffle.gif

Что касается ставить: не знаю откуда у меня руки растут, но при попытке запуска этого творения на хостинге, он выдал критическую ошибку скрипта, можно поподробней куда что там совать и чем крутить? На хостинге линукс, все что надо есть. doubt.gif

Автор: mariner 9.10.2008, 19:12

ребят, я ж всетаки на асс никсов не похож :( надо сначало маны почитать по этой приблуде big_smile.gif

Автор: Delion 20.10.2008, 9:46

Цитата
Народ, кто знает какие хаблисты, акромя знаменитого dchublist.ru?

Открою вам небольшой секрет - сейчас больше половины мировых хаблистов просто сдохло.
Catalin собирается вроде как свой хаблист по GPL распространять,только вряд ли чё хорошего выйдет,он кривущий,вместе с пингером.

Автор: Nickolya 20.10.2008, 22:27

А что по поводу идеи собственного хаблиста? Тема со ссылками не очень, имхо. Вот вам еще вопрос: как лучше, сделать отдельно, на поддомене или в отдельной директории с собственным дизайном, или же вписать в форум, как модуль, хаблист? Второе на порядок сложнее, нужно разбираться уже в готовом скрипте форума, но можно попробовать использовать его функции: поиск, дизайн...

Автор: Delion 20.10.2008, 22:56

Цитата
как лучше, сделать отдельно, на поддомене или в отдельной директории с собственным дизайном, или же вписать в форум, как модуль, хаблист? Второе на порядок сложнее, нужно разбираться уже в готовом скрипте форума, но можно попробовать использовать его функции: поиск, дизайн...

Лучше отдельно,с форумом скрещивать не надо.
Ты бы лучше задумался не над рисованием,а как сделать его реально работающим. За первую попавшуюся софтину хвататься не стоит,зуб даю,что она кривая. В любом случае,нужно всё сначала продумать. Интерфейс изначально хрен с ним. Тип регистрации (пингер\регсервер\оба),протоколы,количество читаемой инфы,прямота пингеров (с этим проблема может быть)?
*свалил всё в одну кучу*

Автор: Nickolya 20.10.2008, 23:47

Ладно, хрен с интерфейсом, по протоколам могу сказать что с адц не работал вообще, хотя где-то на харде есть файл с ним, думаю и его подключим. Софт будет весь свой, пингер заходит на хаб как полноценный клиент, разве что качать с него нельзя, хотя наверно я об этом просто не задумывался, так что инфу можно собирать любую, вплоть до полного списка юзеров. Так что вот вам еще один вопрос: какой инфы будет достаточно, может стоит разбить ее на анонс и полную версию. Про "Тип регистрации" не особо понял, можно поподробнее, извиняю, тут я дилетант.
Что касается этого пингера, то это скрипт на луа, да, до си я еще не дорос, а на пхп такое делать - тоже не мой уровень, да и хз как это будет работать, так что пингер - отдельный сервер с птокой и скриптом. Было бы идеально найди площадку, лучше в наших столицах, где связь получше, может тут кто подсобит?!)
Про сайтовый движок тоже стоит подумать, может кто тут в php+MySQL шарит и поможет, думаю это не особо сложно.
И отдельно - взаимодействие сиго чуда, надо тут тоже выбрать самый правильный вариант. ИМХО: пингер сохраняет на фтп файл с информацией, лучше сразу в массиве пхп, делает запрос на сервер (либо данные автоматически обрабатываются каждые n минут), который уже обрабатывает эту информацию, заносит ее в бд и т.д. Есть еще вариант с запросом определенной запароленной страницы сервера в режиме POST и передачей всех данных через него, но тут придется серверу (сайту) самому парсить инфу.

Автор: Delion 21.10.2008, 1:24

Цитата
инфу можно собирать любую, вплоть до полного списка юзеров.

Если впоследствии делать поиск по юзерам,то и никлист пригодится. Полезно,но не обязательно.
Цитата
какой инфы будет достаточно, может стоит разбить ее на анонс и полную версию.

Тут можно быть солидарными с dchublist.ru ;)
Цитата
Про "Тип регистрации" не особо понял, можно поподробнее, извиняю, тут я дилетант.

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

Смело!
Цитата
площадку, лучше в наших столицах, где связь получше

Нынче везде плохая,истинно.
Ну а по сайту дилетант уже я big_smile.gif

Автор: Enyby 4.11.2009, 15:18

Код
<?php
function lock2key($_LOCK) {

    $lockLength = strlen ($_LOCK);

    $h = ord($_LOCK{0}) ^ ord( $_LOCK{ $lockLength - 1} ) ^ ord( $_LOCK{ $lockLength - 2} ) ^ 5;
    while ($h > 255) {$h = $h - 256;}

    $h = (($h<<4) & 240) | (($h>>4) & 15);

    $a = $h;

    if ($a == '126' || // '~'
    $a == '124' || // '|'
    $a == '96' || // '`'
    $a == '36' || // '$'
    $a == '5' || // '^E'
    $a == '0') // NUL
    {
        $LockToKey = "/%DCN";

        if ($a < 100)
        $LockToKey .="0";
        if ($a < 10)
        $LockToKey .="0";
        $LockToKey .= $a;
        $LockToKey .= "%/";
    } else {
        $LockToKey = chr ($a);
    }

    for ($j = 1; $j < strlen($_LOCK); $j++) {
        $h = ord($_LOCK{$j}) ^ ord($_LOCK{$j-1});

        while ($h > 255) {$h = $h - 256;}

        $h = (($h<<4) & 240) | (($h>>4) & 15);
        $a = $h;

        if ($a == '126' || // '~'
        $a == '124' || // '|'
        $a == '96' || // '`'
        $a == '36' || // '$'
        $a == '5' || // '^E'
        $a == '0') // NUL
        {
            $LockToKey .= "/%DCN";

            if ($a < 100)
            $LockToKey .="0";
            if ($a < 10)
            $LockToKey .="0";
            $LockToKey .= $a;
            $LockToKey .= "%/";
        } else {
            $LockToKey .= chr ($a);
        }
    }

    return $LockToKey;
}

function process($sock, $str) {
//    echo "A: ".$str.'|'.PHP_EOL;
    socket_send($sock, $str.'|', strlen($str) + 1, NULL);
}

function checkHub($address, $port) {
    $nick = substr(md5(mt_rand(0, 100000)), 0, 10);
    $description = substr(md5(mt_rand(0, 100000)), 0, 10);
    $email = substr(md5(mt_rand(0, 100000)), 0, 10);
    $sharesize = mt_rand(10*1024, 20*1024)*mt_rand(1024*1024,2*1024*1024);
    $status = new stdClass();

    if ($fp=@fsockopen(htmlentities($address, ENT_QUOTES),$port,$ERROR_NO,$ERROR_STR,5))
    {
        fclose($fp);
        $status->online = true;
        $status->users = 0;

        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if (!socket_connect($socket, gethostbyname($address), $port)) {
            echo 'Ошибка: '.socket_strerror(socket_last_error());
            return;
        }
        $end = '';
        while ($buffer = socket_read($socket, 2048, PHP_BINARY_READ)) {
            $linie = explode('|', $end.$buffer);
            $size = sizeof($linie);
            for ($i = 0; $i < $size; ++$i) {
                if ($i + 1 == $size) {
                    $end = $linie[$i];
                    break;
                }
                $user = explode(' ', $linie[$i]);
//                echo "Q: ".$linie[$i].PHP_EOL;                
                switch($user[0]) {
                    case '$Hello':
//                        echo "Q: ".$linie[$i].PHP_EOL;
                        if ($user[1] == $nick) {
                            process($socket, '$Version 1,0091');
                            process($socket, '$GetNickList');
                            process($socket, '$MyINFO $ALL '.$nick.' '.$description.'<++ V:0.674,M:A,H:1/0/1,S:20>$ $LAN(T3).$'.$email.'$'.$sharesize.'$');
                        }                        
                        break;
                    case '$HubTopic':
//                        echo "Q: ".$linie[$i].PHP_EOL;    
                        $tmp = explode(' ', $linie[$i], 2);
                        $status->topic = $tmp[1];                                                
                        break;
                    case '$HubName':
//                        echo "Q: ".$linie[$i].PHP_EOL;    
                        $hubinfo = explode(' ', $linie[$i], 2);
                        $tmp = explode(' - ', $hubinfo[1], 2);
                        $status->name = $tmp[0];
                        $status->topic = (count($tmp) > 1) ? $tmp[1] : '';                                            
                        break;
                    case '$Lock':
//                        echo "Q: ".$linie[$i].PHP_EOL;
//                        process($socket, '$Supports NoGetINFO NoHello UserIP2 ');
                        process($socket, '$Key '.lock2key($user[1]));
                        process($socket, '$ValidateNick '.$nick);
                        break;
                    case '$NickList':
//                        echo "Q: ".$linie[$i].PHP_EOL;
                        $tmp = explode(' ', $linie[$i], 2);
                        $nicks = explode('$$', $tmp[1]);
                        $status->users = count($nicks);                        
                        break 3;
                        break;
                    case '$MyINFO':    
//                        echo "Q: ".$linie[$i].PHP_EOL;                    
                        if ($user[2] != $nick) {
                            $status->users++;
                        }
                        else {
                            break 3;
                        }
                        break;
                    default:
//                        echo "Q: ".$linie[$i].PHP_EOL;
                        break;
                }
            }
        }
        socket_close($socket);
    }
    else {
        $status->online = false;
    }
    return $status;
}

Простейший пингер на php. По сути полноценный ДС клиент, обрезаный не хило. Интересует специфиакация общения хабпингер - хаб. Ибо после $BotINFO мне рвут соединение без какого-либо ответа.

Автор: alex82 5.11.2009, 11:15

Цитата
Ибо после $BotINFO мне рвут соединение без какого-либо ответа.

Так и должно быть. Только перед отключением хаб должен отправить команду $HubInfo с информацией о хабе, но только в том случае, если ты не забыл указать в $Supports поддержку $BotInfo/$HubInfo.

Автор: Setuper 5.11.2009, 12:30

Кстати, это зависит от хаба. Некоторые закрывают соединение, а некоторые нет))

Автор: Enyby 5.11.2009, 14:04

Спасибо, помогло. Неплохо бы указать это в теме описания протокола, ибо там я ничего про эту характеристику не нашел.

Автор: Setuper 5.11.2009, 18:56

Добавил в описание протокола.

Автор: HackFresse 6.11.2009, 10:49

Цитата
Вопросы по порядку:

1. Народ, кто знает какие хаблисты, акромя знаменитого dchublist.ru?
2. Какие функции нужны публичному хаблисту?
3. Что если нам сделать свой хаблист?
4. Как думаете, это трудно? big_smile.gif
5. Кто поможет?))
6. Я совсем спятил?


1. не знаю, да и не искал особо.
2. тут надо пофантазировать на тему "а круто бы было, если бы..", а потом к этому списку применить "а надо ли оно вообще такое"
3. можно. или кто-то запретил? )
4. мне кажется, тут придумать и продумать функции - основная задача..
5. чем смогу- помогу. а могу немного MySql, php, jQuery, ajax.
6. ммм... не знаю big_smile1.gif

Автор: Enyby 6.11.2009, 14:06

Мне кажется, HackFresse, что ты не читал пост http://mydc.ru/topic404.html?view=findpost&p=22601. Там написан код PHP, который обеспечивает получение с хаба его названия, топика и количество народа, на нем присутствующего. После небольших изменений можно считать и шару, только это будет достаточно медленно. Поэтому ответы на вопросы 3 и 4 уже есть.

Автор: PomanoB 6.11.2009, 21:36

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

Автор: Enyby 6.11.2009, 23:22

Отлично. Мне вот только интересно на чем, и как ты это забросишь на хостинг?

PS Приведенный выше код позволяет считать пользователей, получать общую шару, мотд топик и т. д. возможности практически безграничные.

PPS Пробовал реализовать на неблокирующих сокетах, но ничего хорошоего не вышло, да и, в добавок, грузит процеесор под самую завязку.

Автор: mariner 6.11.2009, 23:47

perl & python?

Автор: Enyby 6.11.2009, 23:49

Тогда в чем проблема? Я вроде видел где-то тут на перле такого рода чудо.

Автор: Setuper 7.11.2009, 0:10

Согласен с Романовым, а забрасывается на хостинг по средствам бд. Пишем программу, которая делает обход серваков со скидывание инфы в бд, а из бд уже можно хоть куда эту инфу поместить или использовать в каких-либо других целях. В итоге, не ограниченные возможности, достаточно быстро и не нагрузочно.

По поводу неблокирующих сокетов, то процессор грузится на 100% вероятнее всего из-за того, что стоит маленькая задержка между циклами. Когда нагрузки на сервер нет никакой, он концентрируется на обрабатывании огромного числа циклов, что и приводит к загрузке процессора.

Автор: Enyby 7.11.2009, 0:14

Тогда вообще можно не корячится. Где-то постоянно работает грейлинк или другой дс в поддержкой LUA, на нем крутится скрипт который по таймеру в MySQL складывает информацию и все.

Автор: Setuper 7.11.2009, 0:18

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

Автор: Enyby 7.11.2009, 1:09

По-моему это лучше чем писать свой DC. Тем более от скрипта зависят совсем не критичные данные, так что не вижу тут проблемы.

Автор: Enyby 8.11.2009, 13:06

Цитата(Setuper @ 6.11.2009, 23:10) *
По поводу неблокирующих сокетов, то процессор грузится на 100% вероятнее всего из-за того, что стоит маленькая задержка между циклами. Когда нагрузки на сервер нет никакой, он концентрируется на обрабатывании огромного числа циклов, что и приводит к загрузке процессора.


Спасибо. Разобрался, теперь все работает раз в 15 быстрее.

Автор: STRELOK 20.4.2010, 16:10

Цитата(Enyby @ 4.11.2009, 18:18) *

Спасибо за пингер! big_smile.gif Но есть парочка вопросов: как к нему добавить определение на какой программе работает хаб(Например: PtokaX) и кол-во текущей шары на указанном хабе?

Автор: Enyby 20.4.2010, 17:11

Вариантов два. Первый - использовать через некоторое время функцию пингера (смотри функцию протокола $BotINFO), второй - неявный, программу смотреть по ключу присылаемому для проверки, в большинстве случаев он специфичный для каждого хаба, а общую шару считать вручную через получение всех $MyINFO пользователей через $GetNickList и последующего сложения. Сразу скажу, что совсем не обязательно что на одного пользователя придет одно $MyINFO, есть скрипты пытающиеся переопределить какие-то значения, поэтому приходят несколько $MyINFO на одного пользователя. Я использовал для этого map массив.

Автор: STRELOK 20.4.2010, 17:28

Уже пробывал это делать самостоятельно, никак не могу это всё вытянуть :( . Можешь код кинуть, если не жалко?

Автор: Enyby 20.4.2010, 17:34

Полный код я давать не буду. Дам часть, только боюсь что он вырван из контекста и многое не будет понятно. К слову программу я определяю именно через $BotInfo, а шару через получение списка.

Код
case '$HubINFO':
                        $hubinfo = explode(' ', $linie[$i], 2);
                        $tmp = explode('$', $hubinfo[1]);
                        $hub['online'] = 2;
                        $hub['name'] = $tmp[0];
                        $hub['address'] = $tmp[1];
                        $hub['description'] = $tmp[2];
                        $hub['maxusers'] = $tmp[3];
                        $hub['minshare'] = $tmp[4];
                        $hub['minslots'] = $tmp[5];
                        $hub['maxhubs'] = $tmp[6];
                        $hub['type'] = $tmp[7];
                        $hub['admin'] = $tmp[8];

Код
                    case '$MyINFO':
                        $hub['MyINFO'] = true;
                        if ($user[2] != $hub['me']->nick) {
                            $tmp = explode('$', $linie[$i]);
                            if(!isset($hub['users'][$user[2]]))
                            $hub['share'] += $tmp[count($tmp) - 2];
                            $hub['users'][$user[2]] = '';
                        }
                        break;

Автор: STRELOK 20.4.2010, 18:07

Функцию получения шары хаба сделал, но вот проблема: шара определяется только у тех хабов, которые работают на PtokaX, для всех остальных пишется 0

Код
case '$MyINFO':    
//                        echo "Q: ".$linie[$i].PHP_EOL;                
                        if ($user[2] != $nick) {
                        $tmp = explode('$', $linie[$i]);
                            $status->users++;
                            $status->share += $tmp[6];
                        }
                        else {
                            break 3;
                        }
                        break;

Автор: Enyby 20.4.2010, 18:09

Как получаешь список пользователей? Приведи тут листинг взаимодействия твоего клиента с не-птока хабом.

Автор: STRELOK 20.4.2010, 18:14

CODE
Hub: [Incoming][10.180.3.209:411] $Supports NoHello NoGetINFO UserIP2 BotINFO Feed MCTo ZPipe0
Hub: [Incoming][10.180.3.209:411] $HubName Sralkers�Bar
Hub: [Incoming][10.180.3.209:411] <���������> YnHub version: 1.036 produced by Yoshi, Nev and Todi.
Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3 100 �������\��������$<%[mynick]> +���|
Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3

Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3 100 �������\������ �����$<%[mynick]> +���|
Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3

Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3 100 �������\����$<%[mynick]> +���|
Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3

Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3 100 �������\�����$<%[mynick]> +���|
Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3

Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3 100 �������\��������� ��� ��$<%[mynick]> +��|
Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3

Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3 100 �������\Nodvd$<%[mynick]> +nodvd|
Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3
Hub: [Incoming][10.180.3.209:411]

Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3 100 �������\������ ��� Stalker$<%[mynick]> +��|
Hub: [Incoming][10.180.3.209:411] $UserCommand 1 3
Hub: [Incoming][10.180.3.209:411] :����::����:
$$
$$
$$ $$ $$ $$$$$ $$ $$$$$$ $$$$$$ $$$$$$$$$ $$$$$
$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$
$$ $$ $$ $$ $$$$$$$$ $$ $$ $$ $$ $$ $$ $$ $$$$$$$$
$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$
$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$
$$ $$ $$$$$ $$ $$$$$$ $$$$$$ $$ $$ $$ $$$$$

$ $$ :�����::�����:
$$ $$ :�����::�����:
$$$$ $$$$ $$$$$ $$$$ $$$$ :�����::�����:
$$ $$ $$ $$ $$ $ $$ $$ :�����:
$$ $$ $$ $$ $$ $$$$ $$ :�����:
$$ $$ $$ $$ $$ $$ $$ $$ :�����:
$$ $$ $$ $$ $$ $$ $$ $$
$$ $$$$ $$$$$ $$$$ $$ :�����:

Hub: [Incoming][10.180.3.209:411] <���������>
�������: 2010-04-20
����� ���������� - 21:12:18
��� ���� ����� 5 �������
����� ������ ���� 00:45:55
��� ���� � ���� � ������� +���

����� ��������: ���� ��� � ���������� � ����������������.
Hub: [Incoming][10.180.3.209:411] $GetPass
Hub: [Outgoing][10.180.3.209:411] $MyPass *****|
Hub: [Incoming][10.180.3.209:411] $Hello STRELOK
Hub: [Outgoing][10.180.3.209:411] $Version 1,0091|
Hub: [Outgoing][10.180.3.209:411] $GetNickList|
Hub: [Outgoing][10.180.3.209:411] $MyINFO $ALL STRELOK [45]<FlylinkDC++ V:(r398),M:A,H:9/0/2,S:50>$ $100 $$282729094869$|
Hub: [Incoming][10.180.3.209:411] $HubName Sralkers�Bar - [����� ��� �� ������ �� �������???]
Hub: [Incoming][10.180.3.209:411] $OpList ���������$$
Hub: [Incoming][10.180.3.209:411] $MyINFO $ALL ��������� Hub security$ $$$0$
Hub: [Incoming][10.180.3.209:411] $MyINFO $ALL DJON <++ V:0.699,M:A,H:14/0/0,S:84>$ $0.005$$436324032$
Hub: [Incoming][10.180.3.209:411] $MyINFO $ALL IIIycTPblu [43]<FlylinkDC++ V:(r394),M:A,H:10/0/0,S:50>$ $10 $$489889391699$
Hub: [Incoming][10.180.3.209:411] $MyINFO $ALL Kotyra [12]dchub://10.2.59.161<FlylinkDC++ V:(r394),M:A,H:3/0/3,S:15>$ $0.005$dchub://Kotyra.pvt.454.ru$78550487063$
Hub: [Incoming][10.180.3.209:411] $MyINFO $ALL Serx ���� ������� http://mydc.ru/r/?http://10.2.45.127/hublist&lt;FlylinkDC++ V:(r398),M:A,H:13/0/3,S:7,L:7000>$ $10 $dreamer@454.ru$1102187910633$
Hub: [Incoming][10.180.3.209:411] $MyINFO $ALL Skif [12]<FlylinkDC++ V:(r392),M:A,H:14/0/2,S:15>$ $1 $$78508513926$
Hub: [Incoming][10.180.3.209:411] $MyINFO $ALL STRELOK [45]<FlylinkDC++ V:(r398),M:A,H:9/0/2,S:50>$ $100 $$282729094869$
Hub: [Incoming][10.180.3.209:411] <���������> ����������� ��� STRELOK B\

Автор: Enyby 20.4.2010, 18:19

у тебя

Код
$status->share += $tmp[6];

у меня
Код
$hub['share'] += $tmp[count($tmp) - 2];

Я уже и не помню, но похоже на то, что частей, разделенных знаком $ в строке MyINFO может быть не одинаковое число. Сделай вывод переменной tmp и проверь, чтобы на 6 индексе была шара, а не что попало.

Автор: STRELOK 20.4.2010, 18:24

Цитата
Online big_member Удачного дня вам 236 4.51572706628E+13
Online CORE SERVICES Хаб объединённых сетей 95 4.36170028171E+13

последнее - вывод шары, эти хабы на PtokaX. Все остальные хабы, которые не на PtokaX - тупо пустое поле...

Автор: Enyby 20.4.2010, 18:29

Код
$MyINFO $ALL DJON <++ V:0.699,M:A,H:14/0/0,S:84>$ $0.005$$436324032$

Информация к тебе приходит. Так что смотри на этапе разбора. Измени код:
Код
case '$MyINFO':    
//                        echo "Q: ".$linie[$i].PHP_EOL;                
                        if ($user[2] != $nick) {
                        $tmp = explode('$', $linie[$i]);
print_r($tmp);
                            $status->users++;
                            $status->share += $tmp[6];
                        }
                        else {
                            break 3;
                        }
                        break;

И приведи вывод обращения к птока и не-птока хабу.

Автор: STRELOK 20.4.2010, 18:35

PtokaX
Array ( [0] => [1] => MyINFO [2] => ALL RecordBot Бот рекордов хаба [3] => [4] => [5] => iluhi@uzhe.net [6] => [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL GuestBook [3] => [4] => [5] => [6] => [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL dijik [3] => A [4] => LAN(T3) [5] => [6] => 103376033598 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL unknown 1GBiT S33D3R [3] => A [4] => 100 [5] => ICQ_71235286 [6] => 2226003237779 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL FunkyZombieMonkey [3] => A [4] => 100 [5] => [6] => 124932405781 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL disturbed [3] => P [4] => 0.005 [5] => [6] => 72257873450 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ((Dobrovolec dobrovolec.pvt.454.ru - хаб 23-й сети [3] => A [4] => 100 [5] => dobrovolec74 [at] gmail [dot] com [6] => 557644907350 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Pusha [15] [3] => A [4] => 100 [5] => pushnoy90@mail.ru [6] => 289065248732 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Morrigan [15] [3] => A [4] => 0.005 [5] => morrigan-08mail@.ru [6] => 72613833615 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Aukx [15] [3] => A [4] => 0.005 [5] => [6] => 26333855047 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL PUPS [15] [3] => A [4] => 0.005 [5] => [6] => 25916513136 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL KOC [15]WoW Server User [3] => A [4] => 1 [5] => koc@454.ru [6] => 39124163479 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Kiryas [15] [3] => A [4] => 100 [5] => Morris_sv@mail.ru [6] => 55845440633 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Rolex139 как обычно [3] => A [4] => 100 [5] => shakal_forever90@mail.ru [6] => 51024308005 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Никита [5] [3] => A [4] => 0.005 [5] => nik-13801988@yandex.ru [6] => 32537653125 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Flopi [20] [3] => A [4] => 0.005 [5] => roguemaster@rambler.ru [6] => 23263661228 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL cfif [15] [3] => A [4] => 100 [5] => cfiferian@mail.ru [6] => 49002978213 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL bosssyek [15] [3] => A [4] => 1 [5] => [6] => 268480 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL crasyChick [15] [3] => A [4] => 0.5 [5] => [6] => 81311238375 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL 4ydo [15] [3] => A [4] => 0.1 [5] => [6] => 26147599030 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Homer74 [15] [3] => A [4] => 100 [5] => [6] => 22618410681 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Sub-zero [1]? [3] => A [4] => 100 [5] => Sub-zero@454.ru [6] => 88630816775 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL hangman [15] [3] => P [4] => 0.005 [5] => [6] => 27275371302 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL wasya [15] [3] => A [4] => 0.005 [5] => wasya@mail.ru [6] => 17966905211 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL kostyan [15][L:50KB] [3] => A [4] => 0.5 [5] => [6] => 54532959530 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Andreykoooo 37 [3] => A [4] => 100 [5] => [6] => 41681696970 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ovosh овощ [3] => A [4] => 10 [5] => user5888@454.ru [6] => 263703138099 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Kirill1978 [20] [3] => A [4] => 100 [5] => [6] => 85874826635 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL lastik [15] [3] => A [4] => 0.005 [5] => [6] => 90554817366 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Artem78 [14] [3] => A [4] => 0.005 [5] => sserg454@.ru [6] => 0 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL DevilsMayLaugh [14]Sertificated [3] => A [4] => 0.005 [5] => stalfal@bk.ru [6] => 55828616734 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Юрий [3] => A [4] => 5 [5] => [6] => 265428095092 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL God [9 new releases today] Release bot [3] => [4] => [5] => bastyaelvtars@gmail.com [6] => [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL maks [15] [3] => A [4] => 0.005 [5] => [6] => 148673196326 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL citizen по ночам читаю Кафку [3] => A [4] => 100 [5] => morgunov150@gmail.com [6] => 66756596522 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Arrival [15] [3] => A [4] => 0.005 [5] => [6] => 94461747548 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL stimra [18] [3] => A [4] => 0.005 [5] => stimra@gmail.com [6] => 58531022991 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Johni [15] [3] => A [4] => 0.005 [5] => [6] => 0 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ED174 [49] [3] => A [4] => 100 [5] => [6] => 65605621751 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Dpobocek [14]123 [3] => A [4] => 100 [5] => 123 [6] => 257378966856 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Maggotik) [15] [3] => A [4] => 0.005 [5] => Kent7407@mail.ru [6] => 32505222710 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Coquette [15] [3] => P [4] => 0.005 [5] => kristina2708@mail.ru [6] => 6609487408 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Аллексей [30] [3] => A [4] => 0.005 [5] => [6] => 134451372374 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL KENT [15] [3] => A [4] => 0.005 [5] => [6] => 35668659317 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL AUDIMAN [3] => A [4] => 100 [5] => 280521@mail.ru [6] => 11585177283 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL EAV7477 [18] [3] => A [4] => 0.005 [5] => EAV741977@MAIL.RU [6] => 35040733922 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL аБнЕтЛаС [3] => A [4] => 100 [5] => [6] => 160808790574 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Schoolboy [15]Печенька [3] => A [4] => 0.005 [5] => schoolboy174rus@mail.ru [6] => 95201611905 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Vad [15] [3] => A [4] => 100 [5] => Vad@rambler.ru [6] => 27297516038 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL SSerg [13][L:79KB] [3] => A [4] => 0.005 [5] => [6] => 187880571223 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL LectoR [15] [3] => A [4] => 0.005 [5] => [6] => 24924379155 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL SVAGA_Tasha [15]avangard-hub.ru [3] => A [4] => DSL [5] => bg_svga@mail.ru [6] => 87025855593 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ttt [13] [3] => A [4] => 100 [5] => olegsoft@346.com [6] => 106087134531 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Немец [3] => A [4] => 100 [5] => [6] => 78433777754 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL tjcfykvugj [15] [3] => A [4] => 0.005 [5] => [6] => 46476753537 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Учдук [15] [3] => A [4] => 1 [5] => [6] => 37039245527 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Evgun [15] [3] => A [4] => 100 [5] => user3347@454.ru [6] => 25711492047 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Мишаня [15] [3] => A [4] => 100 [5] => [6] => 49262522806 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ssf [14] [3] => A [4] => 0.005 [5] => [6] => 20395851570 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL everkey [0]продам новый мотокультиват [3] => A [4] => 100 [5] => [6] => 2968779576672 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL DJON [3] => A [4] => 0.005 [5] => [6] => 436324032 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Ringo [15] [3] => A [4] => 0.005 [5] => deniska0707.93@mail,ru [6] => 98665994454 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL NICE [37] [3] => A [4] => 100 [5] => http://mydc.ru/r/?http://gameover74.org.ru [6] => 40337630039 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Michael74Rus [13] [3] => A [4] => 100 [5] => [6] => 41375419948 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL dRn [19] [3] => A [4] => 100 [5] => user9548@454.ru [6] => 110350952801 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Sven [37] [3] => A [4] => 100 [5] => [6] => 113426158646 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Domovoy4T3 [13] [3] => A [4] => 10 [5] => [6] => 32153941381 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Wolf[tipos#] [25]777 [3] => P [4] => 100 [5] => parnisha90-2008@mail.ru [6] => 89920726777 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL pumpingiron [15] [3] => P [4] => 1 [5] => [6] => 147848936838 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Voron [14] [3] => A [4] => 0.005 [5] => [6] => 218998012895 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Chill [5][L:400KB]www.warcraftmovie.com [3] => A [4] => 100 [5] => [6] => 20652874486 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL sturka [10] [3] => A [4] => 0.005 [5] => [6] => 693441968447 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL CEBEP [20] [3] => A [4] => 100 [5] => [6] => 238175627064 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Galaktika [13] [3] => A [4] => 0.005 [5] => Large76@yandex.ru [6] => 168227511054 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL KelendrosS [14] [3] => A [4] => 100 [5] => [6] => 148960690036 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL melkiy [13] [3] => A [4] => 100 [5] => [6] => 99449578161 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Splash37 [15]не читай епт [3] => A [4] => 1 [5] => [6] => 0 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL BringMeTheHorizon [12] [3] => A [4] => 0.005 [5] => [6] => 195177519344 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL DEL [20] [3] => A [4] => 100 [5] => [6] => 132261371097 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ExTPuMuCT [30] [3] => A [4] => 100 [5] => [6] => 29472583394 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL FromCityChe [12] [3] => A [4] => 100 [5] => [6] => 220321376615 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Parus [0]Курю бамбук [3] => A [4] => 0.005 [5] => [6] => 425390081050 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ТридцатьСедьмой [14] [3] => A [4] => 0.005 [5] => [6] => 33414439180 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Sfer [15] [3] => P [4] => 0.005 [5] => [6] => 2271590446 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Ленок [18] [3] => A [4] => 100 [5] => [6] => 79820837221 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL AntoXA [12]insit-city [3] => A [4] => 0.005 [5] => [6] => 46997692238 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL user3119 [12] [3] => A [4] => 100 [5] => user3119@454.ru [6] => 114816739542 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Braza [15] [3] => A [4] => 0.005 [5] => [6] => 178311089438 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL 1212 [14] [3] => A [4] => 100 [5] => [6] => 89173909496 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ИгоряН [15] [3] => A [4] => 0.005 [5] => [6] => 140610609898 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Nicolas [15] [3] => A [4] => 0.005 [5] => nigol.75. [6] => 46040043849 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Друг [9] [3] => A [4] => 0.005 [5] => [6] => 225238323011 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL GraFF [12] [3] => A [4] => 100 [5] => graffzaraza@mail.ru [6] => 167735660360 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL PICO [15] [3] => A [4] => 0.005 [5] => user7173@454.ru [6] => 40397931066 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL zaooza [20] [3] => A [4] => 0.005 [5] => [6] => 97967390893 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL cczone [15]death music + video [3] => A [4] => 0.005 [5] => [6] => 1063335384034 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL virus [0] [3] => A [4] => 0.005 [5] => virus80-80 [6] => 235109866638 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Sega74 [22] [3] => A [4] => 20 [5] => [6] => 246732041228 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL 0kay [68] [3] => A [4] => 0.005 [5] => [6] => 146478699862 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL mazai89 [11] [3] => A [4] => 0.005 [5] => [6] => 19005032705 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Gepa [13] [3] => A [4] => 0.005 [5] => [6] => 33472367327 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Choice [14] [3] => A [4] => 0.005 [5] => Mrak_74@mail.ru [6] => 48544196205 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL owl31415 [14] [3] => A [4] => 50 [5] => man@in.love [6] => 110996911093 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL PrettyGirl [15] [3] => A [4] => 0.005 [5] => [6] => 87135111408 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL XolodnbIu [34]37fm [3] => A [4] => 100 [5] => [6] => 56145576200 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL MaxSmith [13] [3] => A [4] => 0.005 [5] => mail@mail.ru [6] => 167494082071 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL jonicool [15] [3] => A [4] => 2 [5] => [6] => 135216482689 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Luc [12] [3] => A [4] => 100 [5] => [6] => 170890067721 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Greeny [15] [3] => A [4] => 10 [5] => [6] => 75391087953 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Slup [19] [3] => A [4] => 100 [5] => [6] => 200540778940 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Amid83 [39]7 [3] => A [4] => 100 [5] => nic_dmv@mail.ru [6] => 53394622214 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL denfox [15] [3] => A [4] => 1 [5] => denfox-85@mail.ru [6] => 35089614297 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL МАЛАЙ [15] [3] => A [4] => 0.005 [5] => [6] => 64644514782 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Lucefer [14] [3] => A [4] => 0.005 [5] => Gafar4onok@list.ru [6] => 335987725663 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL DIVERSANT [14]Zenit St.Peterburg)) [3] => A [4] => 1 [5] => [6] => 22608164618 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL DoG [15] [3] => A [4] => 0.005 [5] => Adishev_evgenii@mail.ru [6] => 115 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL MASTER [14] [3] => A [4] => 0.005 [5] => [6] => 63329289404 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL WELTIR [3] => A [4] => 100 [5] => [6] => 1308306463093 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Slavyn [12] [3] => A [4] => 0.005 [5] => [6] => 78379010771 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL freddi [13] [3] => A [4] => 0.01 [5] => [6] => 134014852133 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL fartowyj [11] [3] => A [4] => 0.005 [5] => [6] => 188221563514 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Kamineko [29](°Д°;) [3] => A [4] => 100 [5] => worldbig@mail.ru [6] => 555811482729 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL G[]RD3N [3] => A [4] => 100 [5] => [6] => 130859985087 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL full [13] [3] => A [4] => 100 [5] => 32619@rambler.ru [6] => 64385504358 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL df9598 [11] [3] => A [4] => 100 [5] => aleksandr081@mail.ru [6] => 55910909773 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL yurchel [13] [3] => A [4] => 1 [5] => [6] => 43266977329 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Chan [6] [3] => A [4] => LAN(T3) [5] => [6] => 566268179111 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Пулямет [25] [3] => A [4] => 0.005 [5] => [6] => 164139681961 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Rico [11] [3] => A [4] => 50 [5] => [6] => 190421844739 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL amd [10] [3] => A [4] => 100 [5] => [6] => 44086638150 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ILuHiN [29] [3] => A [4] => 20 [5] => [6] => 688280689947 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Arhangel [25]dchub://10.2.58.45 [3] => A [4] => 100 [5] => user6839@454.ru [6] => 354985217816 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Ghetto [24] [3] => A [4] => 100 [5] => Ghetto@chel.ru [6] => 240124631787 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ArChi [14] [3] => A [4] => 100 [5] => archi-dj@mail.ru [6] => 35862261343 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL aver89 [0] [3] => A [4] => 100 [5] => [6] => 223760712068 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Dannn [14] [3] => A [4] => 0.005 [5] => [6] => 91250040823 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL sa24 [32] [3] => A [4] => 0.005 [5] => sa24@inbox.ru [6] => 139344092324 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL XuMuK [14] [3] => A [4] => 0.005 [5] => [6] => 192609811193 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Симбад [15] [3] => A [4] => 0.005 [5] => simbad-91@mail.ru [6] => 58752054720 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Lubov [13]Crackin [3] => A [4] => 1 [5] => hgd@uy.com [6] => 30841947048 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL CouDET [14] •VIP• [3] => P [4] => 0.005 [5] => [6] => 9422986509 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL PlasticJesus [20] [3] => A [4] => 0.005 [5] => maroona.ru@mail.ru [6] => 38952176307 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL башкир [11] [3] => A [4] => 0.005 [5] => smirnoff_vf@mail.ru [6] => 66310651962 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL francus [14] [3] => A [4] => 5 [5] => [6] => 62737020816 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL seyko2008 [15]KopNet [3] => A [4] => 100 [5] => [6] => 161714531881 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL SnowSveta [12] [3] => A [4] => 0.005 [5] => [6] => 311743126170 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Gonsales [27] [3] => A [4] => 100 [5] => gonsales174@yandex.ru [6] => 131079631492 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL matador [11] [3] => A [4] => 0.5 [5] => [6] => 22699607874 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL AHTOXuH [15] [3] => P [4] => 0.005 [5] => [6] => 42664410811 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Gambit [15] [3] => A [4] => 0.005 [5] => dfc-gambit@nm.ru [6] => 309037848266 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL eXpert [13] [3] => A [4] => 0.005 [5] => [6] => 491418785608 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL DRhino1 [19] [3] => A [4] => 100 [5] => [6] => 69227932991 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Nescafe [13] [3] => A [4] => 100 [5] => [6] => 47437027862 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL lexx [11] [3] => A [4] => 0.005 [5] => [6] => 197105674088 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL klinge [11] [3] => P [4] => 0.005 [5] => bimer13@mail.ru [6] => 180082946575 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Quazar [15] [3] => P [4] => LAN(T3) [5] => [6] => 144354277915 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL RIDIK [15] [3] => A [4] => 0.005 [5] => [6] => 78599178689 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL GansII [14] [3] => P [4] => 0.005 [5] => [6] => 195621359482 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Kotyra [12]dchub://10.2.59.161 [3] => A [4] => 0.005 [5] => dchub://Kotyra.pvt.454.ru [6] => 82557748889 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL MaZuR [18] [3] => A [4] => 10 [5] => mazur12@mail.ru [6] => 111271181174 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Manager [27] [3] => A [4] => 100 [5] => [6] => 105536960813 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Negoro [20] [3] => A [4] => 100 [5] => user8704@454.ru [6] => 72106803476 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Skif [11] [3] => A [4] => 1 [5] => [6] => 78508513926 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL dima2009 [10] [3] => A [4] => 100 [5] => legov_dima@mail.ru [6] => 105076744999 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL JUDIK [10]борцы-мира творцы [3] => A [4] => 0.005 [5] => [6] => 360635447291 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL BORODA [29] [3] => A [4] => 100 [5] => [6] => 110809438019 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL starmaks [13] [3] => A [4] => 100 [5] => starmaks@list.ru [6] => 52215044229 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Els [15] [3] => A [4] => 0.005 [5] => [6] => 119452376466 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL John1982 [24] [3] => A [4] => 0.005 [5] => [6] => 870572531870 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL nonick [48] [3] => A [4] => 100 [5] => [6] => 0 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL lomozz [12] [3] => A [4] => 10 [5] => [6] => 14265122774 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Дикарь [9] [3] => A [4] => 0.005 [5] => [6] => 206439333306 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Evgeni [19] [3] => A [4] => 0.005 [5] => [6] => 125823717994 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL 4yga [13] [3] => P [4] => 0.005 [5] => [6] => 22722614903 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Рофлмао [8] [3] => A [4] => 0.005 [5] => [6] => 158545746627 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL IIIycTPblu [43] [3] => A [4] => 10 [5] => [6] => 489889391699 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL AlexZander [13] [3] => A [4] => 10 [5] => [6] => 33701617607 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL qashqai [17] [3] => A [4] => 0.01 [5] => [6] => 107759364475 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL big_member [42]мой хаб dchub://10.2.31.110:411 [3] => A [4] => 100 [5] => alexeian@gmail.com [6] => 4285621277891 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Gromgol [12] [3] => P [4] => 1 [5] => gsgigaland@mail.ru [6] => 166356610106 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL MELOMAH [18] [3] => A [4] => 2 [5] => only [6] => 201092824364 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL talisman [13] [3] => A [4] => 0.005 [5] => usmalinasa@mal.ru [6] => 247207108710 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Slaid [13]-_- [3] => A [4] => 0.005 [5] => [6] => 355320648794 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL BamnuP007 [12] [3] => A [4] => 0.005 [5] => [6] => 145528316531 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL SNEIK [32] [3] => A [4] => 0.005 [5] => [6] => 269266735599 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Kero [13] [3] => A [4] => 100 [5] => nedegrin@mail.ru [6] => 101141559173 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL WhiteD12 [7] [3] => A [4] => 0.05 [5] => [6] => 107711204297 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Tima [12] [3] => A [4] => 100 [5] => [6] => 94973659823 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Funky [14]ояебукраб [3] => A [4] => 100 [5] => [6] => 157635816141 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Inspector [11] [3] => A [4] => 0.005 [5] => [6] => 136148807804 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Ksuscha [18] [3] => A [4] => 100 [5] => [6] => 37576029795 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL RaMeg [12] [3] => A [4] => 0.005 [5] => [6] => 543013044426 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL GM [15] [3] => P [4] => 0.005 [5] => [6] => 45546293625 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Edge [21] Okami [3] => A [4] => 2 [5] => [6] => 858609601581 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL faraon [14] [3] => A [4] => Modem [5] => [6] => 103565716328 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Br@bus [15] [3] => A [4] => 1 [5] => [6] => 122495421560 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL 666 [10] [3] => P [4] => 100 [5] => [6] => 331667457141 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL моторист [10] [3] => P [4] => 0.005 [5] => [6] => 146482290680 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Dedgan [3] [3] => A [4] => 0.005 [5] => [6] => 507581171498 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Stigmata [13] [3] => P [4] => 0.005 [5] => [6] => 514379303407 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL alex [11] [3] => A [4] => 100 [5] => alexguin@rambler.ru [6] => 273845245459 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL DEN777 [16]Welcome!!! [3] => A [4] => 100 [5] => darh77@bk.ru [6] => 80269067398 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Dreyoff [6] [3] => A [4] => 0.005 [5] => user10221@454.ru [6] => 247578668339 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Ghost [9] [3] => A [4] => 100 [5] => [6] => 87825392852 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Tyrist [3] => A [4] => 0.005 [5] => [6] => 111577418223 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Adminco [9] [3] => A [4] => 100 [5] => [6] => 187036406054 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL spEc174 [13] [3] => A [4] => 100 [5] => spEc_174@mail.ru [6] => 404251285368 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Xopoc [11] [3] => A [4] => 0.005 [5] => Xoppoc@ramler.ru [6] => 109007097398 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL KoMoK [14] [3] => A [4] => 0.005 [5] => [6] => 80250426169 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL MayAndr [6]SOFT [3] => A [4] => 5 [5] => mayandr@gmail.com [6] => 777488108395 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Kindly [19] [3] => A [4] => 0.005 [5] => [6] => 303126192419 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL MAS [3] [3] => A [4] => 0.005 [5] => [6] => 426656829557 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Dev1 [17]брр.. [3] => A [4] => 0.005 [5] => [6] => 32860902875 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL 1wse [14] [3] => A [4] => 100 [5] => [6] => 19421889771 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Azazelle [79] [3] => A [4] => 0.005 [5] => www.dark_vampire@mail.ru [6] => 53123174536 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL ZippO [16] [3] => A [4] => 0.005 [5] => [6] => 374954155664 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Under [8] [3] => A [4] => 0.005 [5] => [6] => 52344116971 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Sinus [14] [3] => A [4] => 0.005 [5] => [6] => 60757501019 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL exzibit_ [12] [3] => A [4] => 100 [5] => [6] => 220297331279 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Morozov1215 [3]11111111111 [3] => A [4] => 100 [5] => Morozov1213@mail.ru [6] => 639226901314 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL grinka [13] [3] => A [4] => 0.005 [5] => [6] => 43281815213 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Sadist [15]LR [3] => A [4] => 1000 [5] => [6] => 89830720188 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL KuzenAVI [12] [3] => A [4] => 0.005 [5] => [6] => 72403913727 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL KEKCAAAAA [15] [3] => A [4] => 100 [5] => [6] => 22030094575 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL MrKarapuz [43] [3] => A [4] => 0.005 [5] => [6] => 158821557075 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL BOOSERok [11] [3] => A [4] => 0.005 [5] => 123212 [6] => 28885180413 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL SAS [14] [3] => A [4] => 0.005 [5] => USER11525@454.RU [6] => 119670857816 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL Artem [19] [3] => A [4] => 50 [5] => artemchik1996@mail.ru [6] => 136242962289 [7] => ) Array ( [0] => [1] => MyINFO [2] => ALL KUZRO [0] [3] => A [4] => 100 [5] => Alex [6] => 971564937273 [7] => )

От Янхаба, ВерлиХаба вообще ничего...

Автор: Enyby 20.4.2010, 18:42

Это птока хаб или нет?

Автор: STRELOK 20.4.2010, 18:43

Цитата(Enyby @ 20.4.2010, 21:42) *
Это птока хаб или нет?

Птока, от других вообще ничего не выводит.

Автор: Enyby 20.4.2010, 18:49

Код
$Supports NoHello NoGetINFO UserIP2 BotINFO Feed MCTo ZPipe0

BotINFO нужно включать только если собираешся сделать пинг ($BotINFO/$HubINFO) и сразу выйти.
Попробуй убрать его и снова зайти.

Если вывода нет, то это говорит о том, что участок с подсчетом числа пользователей вообще не выполняется. Вставь операторы
Код
echo '1';

По всей программе, заменяя номера последовательно - узнаешь где у тебя выполняется код, а где, нет - так и поймешь где ошибка.

Автор: STRELOK 20.4.2010, 18:53

Проблему решил big_smile.gif . Добавил в case '$Look': process($socket, '$Supports NoGetINFO NoHello UserIP2 '); и всё стало нормально big_smile.gif

Автор: Setuper 20.4.2010, 19:06

Это как раз таки птоха не придерживается протокола, отсылая всегда список пользователей при помощи MyINFO команд.

По протоколу же дело обстоит так:

При отсутствии у клиента характеристики NoHello и при наличии характеристики NoGetINFO хаб должен отсылать клиенту список пользователей при помощи команд $MyINFO и $NickList одновременно. При отсутствии обеих характеристик список пользователей отсылается по средствам команды $NickList, а список пользователей с участием команд $MyINFO можно будет получить только после отсылки на хаб команды $GetINFO.

http://mydc.ru/index.html?showtopic=915&view=findpost&p=19654

Автор: Enyby 20.4.2010, 19:09

Мде. Я что-то думал что STRELOK привел мне лог общения своего пингера с хабом, а не лог CDM отладчика. Поэтому думал что $Supports установлен.

Автор: Enyby 28.7.2010, 14:40

Вывел свою реализацию хаблиста в инет.
http://mydc.ru/r/?http://inethub.olvi.net.ua/dc/
Если интересно, то можете посмотреть. Обновление раз в 5 минут.

Основан на том коде, что я в 21 сообщении темы приводил, правда потом был переточен под многопоточность. Сейчас все хабы пингуются одновременно и общее время пинга не превышает 5 минут. Обычно порядка 1-3 минут.

Полностью написан на php, для связи с хабами используються сокеты.

А как у вас успехи, товарищи-писатели? :-)

Автор: Saymon 29.7.2010, 1:12

успехи.... Ждём вашего релиза big_smile1.gif

Автор: Снегов 29.7.2010, 19:57

когда релиз хаблиста?

Автор: Enyby 30.7.2010, 0:18

Релиза пока не будет. Может быть когда-нибудь.

И вообще, насколько я понял, насчет релиза это была шутка.

Автор: Снегов 30.7.2010, 9:38

Цитата(Enyby @ 30.7.2010, 2:18) *
Релиза пока не будет. Может быть когда-нибудь.

И вообще, насколько я понял, насчет релиза это была шутка.


да полностью готовый скрипт хаблиста и не просим. хотябы файлом пинга. который одновременно пингует все хабы.

Автор: Enyby 30.7.2010, 11:17

Хм. может я слишком скептично настроен, но мне что-то кажется, что Вам нужно готовое решение.
В сообщении №21 находится скрипт, который достаточен, для выполнения последовательных запросов. Если я увижу, что Вы на его основе что-то сделали, но он не удовлетворяет каким-то требованиям (нагрузки, времени и пр.), то тогда может идти речь о скрипте с параллельным пингованием. А пока что это все очень похоже на "пусть будет".

Тем более, что предоставленного скрипта более чем достаточно для выполнения пингования раз в час, разумного количества хабов. Я уже не помню, но по-моему он позволял обработать около 60 хабов за 15 минут.

Автор: Снегов 30.7.2010, 15:03

готовое решение у мну есть. но пингование очень долго происходит.

и как я понял за основУ вы взяли скрипт выложенный помойму saymon ом. hublist night knight.
сам его использую. но неустраивает время опроса.
для опроса 10 хабов уходит 7-8 минут.

Автор: Enyby 30.7.2010, 15:30

За основу я действительно брал какой-то кривой клиент на php. Но находил его я не здесь, и большую часть просто выкинул. Он мне только помог разобраться с тем, как нужно в принципе работать. ОСтальное пришлось писать с нуля.

Теперь по поводу Вашего решения. Какой там пингер, мой или это еще чья-то разработка?

Странно что на 10 хабов уходит 7 минут.

Автор: Снегов 30.7.2010, 16:47

пингер тот который и у вас был до модификации

Автор: Enyby 31.7.2010, 8:17

Т. е. из сообщения №21?

Приведите код, как вы его вызываете.

Автор: Снегов 31.7.2010, 9:57

Код
function execute($sock, $str) {
socket_send($sock, $str.'|', strlen($str) + 1, NULL);
}

function lock2key($_LOCK) {

$lockLength = strlen ($_LOCK);

$h = ord($_LOCK{0}) ^ ord( $_LOCK{ $lockLength - 1} ) ^ ord( $_LOCK{ $lockLength - 2} ) ^ 5;
while ($h > 255) {$h = $h - 256;}

$h = (($h<<4) & 240) | (($h>>4) & 15);

$a = $h;

if ($a == '126' || // '~'
$a == '124' || // '|'
$a == '96' || // '`'
$a == '36' || // '$'
$a == '5' || // '^E'
$a == '0') // NUL
{
$LockToKey = "/%DCN";

if ($a < 100)
$LockToKey .="0";
if ($a < 10)
$LockToKey .="0";
$LockToKey .= $a;
$LockToKey .= "%/";
} else {
$LockToKey = chr ($a);
}

for ($j = 1; $j < strlen($_LOCK); $j++) {
$h = ord($_LOCK{$j}) ^ ord($_LOCK{$j-1});

while ($h > 255) {$h = $h - 256;}

$h = (($h<<4) & 240) | (($h>>4) & 15);
$a = $h;

if ($a == '126' || // '~'
$a == '124' || // '|'
$a == '96' || // '`'
$a == '36' || // '$'
$a == '5' || // '^E'
$a == '0') // NUL
{
$LockToKey .= "/%DCN";

if ($a < 100)
$LockToKey .="0";
if ($a < 10)
$LockToKey .="0";
$LockToKey .= $a;
$LockToKey .= "%/";
} else {
$LockToKey .= chr ($a);
}
}
return $LockToKey;
}

Автор: Enyby 31.7.2010, 9:58

Это что?

Автор: dro 16.8.2010, 15:03

Доброго времени суток!
Как я понял для того чтобы получить доп инфу по хабу $HubInfo

мы должны в Support определить BotInfo или HubInfo???

и далее я так понял идет такая конструкция?

Код
                    case '$Lock':
                        process($socket, '$Supports BotInfo');
                        process($socket, '$Key '.lock2key($user[1]));
                        process($socket, '$ValidateNick '.$nick);

Автор: Nickolya 16.8.2010, 16:30

В $Supports ты определяешь BotInfo, если хаб его не поддерживает (не разрешает "пинг с хаблистов"), то он выкидывает клиента. http://mydc.ru/index.html?showtopic=915&view=findpost&p=6846

Автор: Setuper 16.8.2010, 16:58

Лучше сюда смотреть: http://mydc.ru/index.html?showtopic=915&view=findpost&p=7384

Автор: dro 16.8.2010, 20:03

Тогда я не понимаю каким образом можно снять пар-ры хаба?
топик,максимум юзеров. админа.

Автор: Setuper 16.8.2010, 20:16

Можно только войдя на хаб. Пингеры так и делают.

Автор: dro 16.8.2010, 21:25

Дак это получает после $ValidateNick ?

Автор: Enyby 16.8.2010, 22:06

Да. Тебе сюда: http://mydc.ru/topic915.html Спойлер под темой "Общая (обязательная) последовательность входа на хаб.
"Рукопожатие" между клиентом и хабом."

Автор: dro 17.8.2010, 9:24

хоть убейте но не дает мне хаб о себе информации

Код
Хаб ---> Клиент ($HubINFO)

Описание:

Данная команда нужна для получения более полной информации о хабе.

[Описание_бота] - может быть любой строкой, обычно это информация об адресе или хаб-листе.
[Имя_хаба], [Адрес_хаба] и [Описание_хаба] - это пункты, которые будут показаны в хаб-листе (некоторые хабы имеют несколько адресов это помогает определит главный адрес). Описание хабов меняется часто, поэтому требует частого обновления.
[Макс_юзеров], [Мин_шара], [Мин_слотов], [Макс_хабов] - соответственно максимально допустимое число пользователей, минимально допустимая шара на хабе, минимальное число слотов, максимальное число подключенных хабов.
[Тип] - этот параметр даёт информацию о программе, под управлением которой работает хаб.
[Владелец] - владелец хаба или email адрес владельца хаба

Автор: Setuper 17.8.2010, 12:06

Раз не даёт, значит тому 2 причины:
1) ты не правильно запрашиваешь
2) хаб не подерживает пинги или они просто отключены.

Автор: dro 17.8.2010, 12:07

Видимо 1. Потому как хаб держит пинги 100%

Автор: Enyby 17.8.2010, 21:31

Сделай вывод куда-нибудь, всего что отправляешь и что получаешь от хаба, а потом смотри формат протокола.

Автор: dro 18.8.2010, 22:19

Теперь все отлично летает, нашел пару изъянов.
Enyby вы в сокетах какое максимальное количество байтов используете?

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

Автор: Ksan 18.8.2010, 23:35

Если стоит галочка в настройках хаба - "Не разрешать пинг с хаблиста", то вряд ли ты что-то придумаешь..

Автор: Enyby 18.8.2010, 23:56

Цитата(dro @ 18.8.2010, 21:19) *
Enyby вы в сокетах какое максимальное количество байтов используете?

Это вы о чем? Если о буфере для чтения - 2048 байт. Буфер записи - строка, которая не имеет никаких особых ограничений.

Цитата(dro @ 18.8.2010, 21:19) *
Да и кстати бывает так что хаб вроде бы онлайн, но данные не отдает т.к. хаб занят и не пустил бота, думаю что в этом случае делать

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

Автор: dro 19.8.2010, 8:27

Цитата(Enyby @ 19.8.2010, 0:56) *
Это вы о чем? Если о буфере для чтения - 2048 байт. Буфер записи - строка, которая не имеет никаких особых ограничений.


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


А Вы каким образом обходите хаб?
просто по времени как я понял обойти пингом хаб быстрее нежели клиентом, или я ошибаюсь?

Да и наткнулся на такую вещь, есть хабы с ограничением по открытым хабам, меня на такие тоже не пускает(

Кому интересно вот мой пингер ( завязан с БД)
Хотелось бы услышать критику по коду и недочеты.Спасибо

CODE
<?php

set_time_limit ( 1800 );
require ('config.php');

#####timer
$mtime = microtime();
$mtime = explode(' ', $mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
#########

function execute($sock, $str) {
// echo "A: ".$str.'|'.PHP_EOL."\r\n";
socket_send($sock, $str.'|', strlen($str) + 1, NULL);
}

function lock2key($_LOCK, $port)
{
$lockLength = strlen($_LOCK);

$LockToKey = '';

for ($j = 0; $j < strlen($_LOCK); $j++)
{
if($j == 0) {
$h = ord($_LOCK{0}) ^ 0 ^ ord( $_LOCK{ $lockLength - 1} ) ^ ($port % 256 + ($port>>8) % 256);
}
else {
$h = ord($_LOCK{$j}) ^ ord($_LOCK{$j-1});
}

$h = $h % 256;

$a = (($h<<4) & 240) | (($h>>4) & 15);

if($a == '126' or $a == '124' or $a == '96' or $a == '36' or $a == '5' or $a == '0') {
$LockToKey .= "/%DCN";

if ($a < 100) $LockToKey .= "0";
if ($a < 10) $LockToKey .= "0";

$LockToKey .= $a;
$LockToKey .= "%/";
}
else {
$LockToKey .= chr($a);
}
}
return $LockToKey;
}

$mysql = mysql_connect($host, $user, $userpass) or die("<font color='red'>Ошибка соединения с MySQL!</font><br>");
mysql_select_db($bd, $mysql) or die("<font color='red'>Ошибка базы данных MySQL!</font><br>");

$result = @mysql_query("SELECT * FROM `".$dbtable."` ORDER BY `".$dbtable."`.`ID` ASC LIMIT 0 , 30");
while ($data = @mysql_fetch_assoc($result)) {

$useri = 0;
$share = 0;
$infoyes = 1;

if ($fp=@fsockopen($data['Adres'],$data['Port'],$ERROR_NO,$ERROR_STR,5)) {
fclose($fp);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!socket_connect($socket, $data['Adres'], $data['Port'])) {
echo 'Error..';
return;
}


while ($buffer = socket_read($socket, 2048, PHP_BINARY_READ)) {

$linie = explode('|', $buffer);
for ($i = 0; $i < sizeof($linie); ++$i) {
$user = explode(' ', $linie[$i]);

// $somecontent = "Q: ".$linie[$i].PHP_EOL."\r\n";


switch($user[0]) {
case '$Lock':
execute($socket, '$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch OpPlus Feed MCTo HubTopic BotList ClientID MiniSlots GetZBlock ADCGet TTHL TTHF ClientID CHUNK GetCID BotINFO');
execute($socket, '$Key '.lock2key($user[1]),$data['Port']);
execute($socket, '$ValidateNick '.$nick);
break;
case '$Hello':
if ($user[1] == $nick) {
execute($socket, '$Version 1,0091');
execute($socket, '$GetNickList');
execute($socket, '$MyINFO $ALL '.$nick.' Bot by dro <FlylinkDC++ V:(r386),M:P,H:21/0/1,S:15>$ $100 $alexandr@drozdin.ru$670969607454$');
execute($socket, '$BotINFO {HubListPinger} hublist pinger');
}
break;
case '$HubINFO':
$hubinfo = $linie[$i];
break 3;
break;
case '$MyINFO':
$myinfo = explode('$', $linie[$i]);
@$share = $share + $myinfo[6];
$useri = $useri + 1;
break;
}
}
}
socket_close($socket);

$hubinfo = str_replace( "HubINFO ", "", $hubinfo);
$hubinfo = explode('$', $hubinfo);
$hubinfo[3] = str_replace(".px.", " ", $hubinfo[3]);

$hubinfo[1] = str_replace("<", "&lt;", $hubinfo[1]);
$hubinfo[1] = str_replace(">", "&gt;", $hubinfo[1]);
$hubinfo[3] = str_replace("<", "&lt;", $hubinfo[3]);
$hubinfo[3] = str_replace(">", "&gt;", $hubinfo[3]);

if ($infoyes == "1") {
mysql_query("UPDATE `".$dbtable."` SET Name = '".$hubinfo[1]."', Descr = '".$hubinfo[3]."',
Maxusers = '".$hubinfo[4]."', MinShare = '".$hubinfo[5]."', MinSlots = '".$hubinfo[6]."',
MaxHubs = '".$hubinfo[7]."', Soft = '".$hubinfo[8]."' WHERE id = ".$data['ID']."");
}
#$infoyes = "0";

mysql_query("UPDATE `".$dbtable."` SET Users = ".$useri.", Status = 'Online', Share = ".floatval($share)." WHERE id = ".$data['ID']."");

if ($useri > $data['Userspeak']){
mysql_query("UPDATE `".$dbtable."` SET Userspeak = ".$useri." WHERE id = ".$data['ID']."");
}

if ($share > $data['Sharepeak']){
mysql_query("UPDATE `".$dbtable."` SET Sharepeak = ".floatval($share)." WHERE id = ".$data['ID']."");
}

}else{
mysql_query("UPDATE `".$dbtable."` SET Status = 'Offline' WHERE id = ".$data['ID']."");
mysql_query("UPDATE `".$dbtable."` SET Users = '0' WHERE id = ".$data['ID']."");
mysql_query("UPDATE `".$dbtable."` SET Share = '0' WHERE id = ".$data['ID']."");
}
}
mysql_close($mysql);
########end timer
$mtime = microtime();
$mtime = explode(" ", $mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo 'This page was created in ' .$totaltime. ' seconds.';

?>


Автор: Enyby 20.8.2010, 1:38

Пингом - быстрей, но пинг предоставляет недостаточно информации. С другой стороны, он виден админу, и если часто пинговать, то вас попросту забанят. Поэтому у меня раз в 5 минут хаблист заходит как клиент и раз в час - как пингер, т. е. каждый 12 раз из тех, что по 5 минут.

В целом пингер неплох.
Критика по коду:

  1. Соблюдайте отступы, намного приятнее будет читать. Для этих целей лучше пользоваться IDE с автоформатированием кода, например, Eclipse.
  2. Лучше не использовать принудительное подавление @, а писать так, чтобы никаких ошибок не было.
  3. Код
    $myinfo = explode('$', $linie[$i]);
    @$share = $share + $myinfo[6];

    У вас нет никаких гарантий что в массиве 6 элементов. Целесобразнее:
    Код
    $myinfo = explode('$', $linie[$i]);
    if(isset($myinfo[6]))
    $share = $share + $myinfo[6];

  4. Код
    $useri = $useri + 1;

    Лучше писать через оператор ++.
  5. Код
    function lock2key($_LOCK, $port)

    Не тот алгоритм. Этот алгоритм для захода ХАБА на хаблист, а вам нужен обычный, в котором не порта. Да и порт вы не тот указали, вы указали порт подключения, а в этом алгоритме нужно указать локальный порт.


Чтобы бота пускали на все хабы, не нужно передавать специфический тэг клиента. Да и число хабов онлайн можно не 21 ставить. "H:21/0/1" - 21 хаб 1 и на одном админ.

UPD:
И да, я тут увидел зачатки работы как клиента (Подсчет MyINFO). Вам предстоит нетривиальная задача определения когда заканчивается процесс инициализации хаба. Также вам необходимо отсевать свой собственный MyINFO, так как он вносит погрешность в ваши измерения. В дополнение к этому есть скрипты манипулирующие MyINFO, из-за них оно может приходить несколько раз для одного пользователя, что вызовет искажение размера шары и числа пользователей.

Так что работы тут еще много.

Автор: PomanoB 20.8.2010, 9:03

Можно считать, что процесс инициализации закончился, если команды MyINFO уже были, и пришла первая не MyINFO команда

Автор: dro 20.8.2010, 12:13

2Enyby Спасибо за критику и советы. Lock поправил

По поводу MyINFO можно поидеи себя отсеять сделав -1 (+- 2 чел не сыграют роли)
Так же можно сделать и с шарой.
Но вот Вы правильно заметили что может придти несколько раз MyINFO, на этот счет я думаю загонять все данные в массив и потом массив проверять на одинакове эл-ты, а далее уже из этого массива и будем считать шару и число юзеров за вычетом моих данных. Верно ли это?

Бывает такое что хаб после MyINFO рвет соединение и скрипт отработал впустую, например dc.cifracom.ru

Собственно по какому принципу лучше смотреть когда заканчивается процесс инициализации хаба?

Автор: Enyby 20.8.2010, 13:00

Итак, по порядку.

Как было справделиво замеченно, можно отсекать по команде не MyINFO, после MyINFO, но не все тут гладко.
Можно довольно долго висеть на хабе из 5 человек ожидая другой команды.

Вообще говоря, по протоколу, список MyINFO, должен заканчиваться MyINFO хаблиста, но, к сожалению, так поступают не все хабы.

Дальше. Есть такое расширение протокола как Zon. Которое предполагает сжатие gzip дл передаваемых данных. проблема состоит в том, что некоторые хабы в любом случае включат это сжатие не смотря поддерживается оно клиентом или нет. Эта команда может появляться где угодно и, обычно, список пользователей передается в сжатом виде, что означает, что ее нужно игнорировать и не разрывать соединение, так как процесс входа на хаб может быть не завершен.

Также следует отслеживать команды ValidateDenide и ForceMove. Первая означает что ник занят или не является допустимым, а вторая - дает редирект, при переполнении или других причинах. Четкой команды, свидетельствующей о бане не существует, обычно это сообщение от бота со словом ban, но не обязательно.

100% алгоритма определения окончания инициализации не существует или мне он не известен. Пользуюсь набором правил следующего вида:

  1. Если получены команды Quit или Search - вход завершен.
  2. Если получена команда OpList и перед этим была получена хоть одна команда MyINFO - вход завершен. Некоторые хабы, отсылают список операторов ранее списка пользователей, хотя это и не соответствует протоколу.
  3. Если было зафиксировано получение команд MyINFO, а после этого пришла команда не Zon и не MyINFO - вход завершен.


Как вариант, можно еще пытаться отлавливать MOTD, но оно может отсылаться в ЛС.

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

Еще. Хаб может не поддерживать BotINFO/HubINFO, тогда с текущим алгоритмом вы будете ждать вечность команды HubINFO. Чтобы этого не произошло, необходимо, после указания поддержки данных команд в отсылаемом Supports, проверить наличие поддержи в полученном Supports.

Автор: dro 20.8.2010, 13:38

С шарой и ассоциативным массивом я так и сделал.
А насчет остального буду думать и дописывать спасибо!!!!!

Автор: Alexey 20.8.2010, 15:44

Цитата(Enyby @ 20.8.2010, 14:00) *
[*]Если получена команда OpList и перед этим была получена хоть одна команда MyINFO - вход завершен. Некоторые хабы, отсылают список операторов ранее списка пользователей, хотя это и не соответствует протоколу.

В одном хабе с самописным сервером выполнение этого условия вызовет преждевременный разрыв, поскольку отсылается такая порнография:
Раскрывающийся текст
http://dchublist.ru/hubs/1975/
Цитата
Hub: [Incoming][193.93.13.15:411] $OpList CheByRashKa$$Eras$$
Hub: [Incoming][193.93.13.15:411] $MyINFO $ALL -=SS=- <StrgDC++ V:2.21,M:A,H:8/1/0,S:18>$ $0.005$$13535451665$
Hub: [Incoming][193.93.13.15:411] $OpList CheByRashKa$$Eras$$
Hub: [Incoming][193.93.13.15:411] $MyINFO $ALL Alex_ [5]<ApexDC++ V:s16.4,M:P,H:4/0/0,S:5>$ $0.01 $ $18657570984$
Hub: [Incoming][193.93.13.15:411] $OpList CheByRashKa$$Eras$$
Hub: [Incoming][193.93.13.15:411] $MyINFO $ALL -<pl++ V:4.56,M:A,H:5/0/0,S:10>$ $100$http://10.5.0.1/support/ $28861738685$
Hub: [Incoming][193.93.13.15:411] $OpList CheByRashKa$$Eras$$
Hub: [Incoming][193.93.13.15:411] $MyINFO $ALL Nafanya 3DCar.ru<StrgDC++ V:2.41,M:A,H:5/0/0,S:5>$ $100$http://10.5.0.1/forum/$313242599709$
Hub: [Incoming][193.93.13.15:411] $OpList CheByRashKa$$Eras$$

Автор: Enyby 20.8.2010, 15:58

Спасибо за замечание. Мне оно правда не грозит, так как хаблист локальный, но буду знать.
Вообще говоря, самописные хабы это страшная сила, наподобие IE 6 при верстке. У меня были проблемы с dcworlds, но он уже не локальный, да и давно уже это было, не помню сути. Помню только что нарушался протокол и хаб был самописным.

Автор: dro 29.8.2010, 15:25

А подскажите такой момент.
У меня кол-во пользователей с действительным расходится примерно на 100.
Где искать косяк?
Или это из-за того что не все клиенты сразу отвечают на MyInfo? И как быть тогда?

Автор: Enyby 29.8.2010, 16:08

1. Включаешь вывод всех входящих/отправленных команд и получаешь лог файл.
2. В отладчике ДС клиента заходишь на тот же хаб - получаешь второй лог.
3. Ищешь отличия. Чтобы не делать это руками, организуй вывод со своего хаблиста в формат аналогичный отладчику, а потом пользуйся утилитами сравнения файлов, например, тем же тоталом коммандером.
4. Если отличия есть, то причина в том что ты рано закрыл соединение.
5. Если нет, то причина в обработке внутри пингера - начинаешь во всю использовать print_r и var_dump.

UPD: И да, на майинфо отвечает не клиент а хаб. И отсылает он сразу все, вот только иногда он это криво делает.

Автор: PomanoB 29.8.2010, 17:23

Причина может быть в том, что у тебя в цикле читаются данные из сокета, потом эти данные разбиваются по |.
Когда данных пришло меньше, чем 2048, все хорошо.
Но когда хаб большой, все MyINFO за одно чтение получить не удается, и выходит, что из сокета прочиталось часть MyINFO, то есть конец буфера выглядит так: "... |$MyINF". И остальная часть MyINFO прочитается только при следующем чтении. Но увеличиваться счетчик юзеров не будет, так как первая часть MyINFO не распознается как MyINFO.

Автор: Enyby 29.8.2010, 18:30

PomanoB прав. Чтобы подобного не возникало, нужно последний элемент всегда приплюсовывать к новому буферу, например так:

Код
        while ($buffer = socket_read($socket, 2048, PHP_BINARY_READ)) {
            $linie = explode('|', $end.$buffer);
            $size = sizeof($linie);
            for ($i = 0; $i < $size; ++$i) {
                if ($i + 1 == $size) {
                    $end = $linie[$i];
                    break;
                }

Если элемент последний, то он заносится в переменную $end, которая затем приписывается спереди к новому буферу.

UPD: На самом деле не важно где прервалсь команда, на ключевом слове или где-то еще, в любом случае дальнейшая обработка фрагмента будет ошибочной.

Автор: Nickolya 29.8.2010, 19:01

Да, но прибавлять последний элемент массива надо лишь при условии что он не заканчивается |, иначе получится дубляж некоторых команд, что конечно может и не быть критичным, но все-таки неверно. Хотя как я тут вижу, если команды были полными, то приплюсуется лишь пустая строка big_smile.gif

Автор: Enyby 29.8.2010, 19:05

Последний элемент не может заканчиваться символом "|", так как функция explode разбивает по нему на элементы массива. Если же "|" будет последним символом в строке, то в массиве последний элемент будет пустой строкой.

Автор: dro 29.8.2010, 21:02

Частично понял о чем речь!
Спасибо буду дальше разбираться

З.Ы. А если размер буффера поставить больше?


UPD: Вроде бы все стало считать отдично!!! Благодарю Вас!

Автор: Enyby 29.8.2010, 22:04

Цитата(dro @ 29.8.2010, 20:02) *
А если размер буффера поставить больше?

Возврат из функции socket_read происходит по двум причинам:
  1. заполнился буфер;
  2. превышено время ожидания заполнения буфера;

Если буфер слишком мал, то скрипт будет частенько бегать в цикле, не обрабатывая команды, а лишь инкрементно приращая переменную $end. Если же буфер слишком велик, то большую часть времени скрипт будет ждать таймаута заполнения буфера, в результате чего, хаб имеет право разорвать соединение, как слишком медленное, но даже если этого не произойдет, все равно будет существенное падение скорости работы пингера.

Автор: dro 29.8.2010, 22:48

Я понял. Спасибо.

Если вас не затруднит, откритикуйте мой пингер

Код
Код
<?php

set_time_limit ( 1800 );
require ('config.php');

#####timer
      $mtime = microtime();
      $mtime = explode(' ', $mtime);
      $mtime = $mtime[1] + $mtime[0];
      $starttime = $mtime;
#########

function debug($text){
    $name = 'log_'.date('H:m d-m').'.txt';
    $filename = 'log/'.$name;
    $handle = fopen($filename, 'a');
    fwrite($handle, $text);
    fclose($handle);    
}
      
function execute($sock, $str) {
      #echo "A: ".$str.'|'.PHP_EOL."<br>";

    $dedubg_info="A: ".$str."|".PHP_EOL."\r\n";
    debug($dedubg_info);

    socket_send($sock, $str.'|', strlen($str) + 1, NULL);
}

function lock2key($_LOCK) {

    $lockLength = strlen ($_LOCK);

    $h = ord($_LOCK{0}) ^ ord( $_LOCK{ $lockLength - 1} ) ^ ord( $_LOCK{ $lockLength - 2} ) ^ 5;
    while ($h > 255) {$h = $h - 256;}

    $h = (($h<<4) & 240) | (($h>>4) & 15);

    $a = $h;

    if ($a == '126' || // '~'
    $a == '124' || // '|'
    $a == '96' || // '`'
    $a == '36' || // '$'
    $a == '5' || // '^E'
    $a == '0') // NUL
    {
        $LockToKey = "/%DCN";

        if ($a < 100)
        $LockToKey .="0";
        if ($a < 10)
        $LockToKey .="0";
        $LockToKey .= $a;
        $LockToKey .= "%/";
    } else {
        $LockToKey = chr ($a);
    }

    for ($j = 1; $j < strlen($_LOCK); $j++) {
        $h = ord($_LOCK{$j}) ^ ord($_LOCK{$j-1});

        while ($h > 255) {$h = $h - 256;}

        $h = (($h<<4) & 240) | (($h>>4) & 15);
        $a = $h;

        if ($a == '126' || // '~'
        $a == '124' || // '|'
        $a == '96' || // '`'
        $a == '36' || // '$'
        $a == '5' || // '^E'
        $a == '0') // NUL
        {
            $LockToKey .= "/%DCN";

            if ($a < 100)
            $LockToKey .="0";
            if ($a < 10)
            $LockToKey .="0";
            $LockToKey .= $a;
            $LockToKey .= "%/";
        } else {
            $LockToKey .= chr ($a);
        }
    }

    return $LockToKey;
}

$mysql = mysql_connect($host, $user, $userpass) or die("<font color='red'>Ошибка соединения с MySQL!</font><br>");
mysql_select_db($bd, $mysql) or die("<font color='red'>Ошибка базы данных MySQL!</font><br>");

mysql_query("SET NAMES 'cp1251'");
mysql_query("SET CHARACTER SET 'cp1251'");

    $result = @mysql_query("SELECT * FROM `".$dbtable."` ORDER BY `".$dbtable."`.`ID` ASC LIMIT 0 , 30");
     while ($data = @mysql_fetch_assoc($result)) {

        $total_share= 0;
        $useri = 0;
        $infoyes = 1;
        $info='';
        $end = '';

    if ($fp=@fsockopen($data['Adres'],$data['Port'],$ERROR_NO,$ERROR_STR,5)) {
        fclose($fp);
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if (!socket_connect($socket, $data['Adres'], $data['Port'])) {
            echo 'Error..';
            return;
        }

    echo "Starting ".$data['Adres']."<br>";

    while ($buffer = socket_read($socket, 2048, PHP_BINARY_READ)) {
            $linie = explode('|', $end.$buffer);
            $size = sizeof($linie);
            for ($i = 0; $i < $size; ++$i) {
                if ($i + 1 == $size) {
                    $end = $linie[$i];
                    break;
                }

         $user = explode(' ', $linie[$i]);

    #echo "Q: ".$linie[$i].PHP_EOL."<br>";

    $dedubg_info="Q: ".$linie[$i].PHP_EOL."\r\n";
    debug($dedubg_info);

            if(preg_match('#не поддерживает пинга#',$linie[$i])){
                echo $data['Adres']." не поддерживает пинга<br>";
                $info=0;
                break;
            }else{
                switch($user[0]) {
                case '$Lock':
                    execute($socket, '$Supports NoGetINFO NoHello UserIP2 Feed MCTo HubTopic ClientID MiniSlots GetZBlock ADCGet CHUNK GetCID BotINFO');
                    execute($socket, '$Key '.lock2key($user[1],$data['Port']));
                    execute($socket, '$ValidateNick '.$nick);
                break;
                case '$Hello':
                    if ($user[1] == $nick) {
                    execute($socket, '$Version 1,0091');
                    execute($socket, '$GetNickList');
                    execute($socket, '$MyINFO $ALL '.$nick.' Bot by dro <++ V:0.674,M:A,H:1/0/1,S:20>$ $LAN(T3).$alexandr@drozdin.ru$'.$myshare.'$');
                    #execute($socket, '$MyINFO $ALL '.$nick.' Bot by dro <FlylinkDC++ V:(r386),M:P,H:1/0/1,S:15>$ $100    $alexandr@drozdin.ru$670969607454$');
                    execute($socket, '$BotINFO {HubListPinger} hublist pinger');
                    }
                break;
                        case '$HubName':
                       $hubname = explode(' ', $linie[$i], 2);
                               $tmp = explode(' - ', $hubname[1], 2);
                                $hubname = $tmp[0];                                        
                       break;
                case '$HubINFO':
                    $hubinfo = $linie[$i];
                    break 3;
                break;
                case '$MyINFO':
                    $myinfo = explode('$', $linie[$i]);
                    if(isset($myinfo[6])){
                        $info[$myinfo[2]]= $myinfo[6];
                    }
                break;
                }
            }
        }
    }
    socket_close($socket);
    echo "End ".$data['Adres']."<br>";    
            
    $hubinfo = str_replace( "HubINFO ", "", $hubinfo);
    $hubinfo = explode('$', $hubinfo);
    $hubinfo[3] = str_replace(".px.", " ", $hubinfo[3]);

    $hubinfo[1] = str_replace("<", "<", $hubinfo[1]);
    $hubinfo[1] = str_replace(">", ">", $hubinfo[1]);
    $hubinfo[3] = str_replace("<", "<", $hubinfo[3]);
    $hubinfo[3] = str_replace(">", ">", $hubinfo[3]);
    
    if($hubinfo[1] == ''){
        $hubinfo[1] = $hubname;
        $hubinfo[3] = "Неудалось получить информацию о хабе";
    }
    
    if($info!=0){
        array_unique($info);
        $useri=count($info);
        $total_share=0;
        
        foreach($info as $share){
            $total_share=$share+$total_share;
        }
        $total_share=$total_share - $myshare;
    }else{
        $hubinfo[1] = $data['Adres'];
        $hubinfo[3] = "Возможно хаб не поддерживает пинги";
    }
    #print_r($info);
    unset($info);

    if ($infoyes == "1") {
        // mysql_query("UPDATE `".$dbtable."` SET Name = '".$hubinfo[1]."', Descr = '".$hubinfo[3]."',
                     // Maxusers = '".$hubinfo[4]."', MinShare = '".$hubinfo[5]."', MinSlots = '".$hubinfo[6]."',
                     // MaxHubs = '".$hubinfo[7]."', Soft = '".$hubinfo[8]."'  WHERE id = ".$data['ID']."");

        mysql_query("UPDATE `".$dbtable."` SET Name = '".$hubinfo[1]."',Descr = '".$hubinfo[3]."',
                     Maxusers = '".$hubinfo[4]."', MinShare = '".$hubinfo[5]."', MinSlots = '".$hubinfo[6]."',
                     MaxHubs = '".$hubinfo[7]."', Soft = '".$hubinfo[8]."'  WHERE id = ".$data['ID']."");
    }
    #$infoyes = "0";

    mysql_query("UPDATE `".$dbtable."` SET Users = ".$useri.", Status = 'Online', Share = ".floatval($total_share)." WHERE id = ".$data['ID']."");

    if ($useri > $data['Userspeak']){
        mysql_query("UPDATE `".$dbtable."` SET Userspeak = ".$useri." WHERE id = ".$data['ID']."");
    }

    if ($total_share > $data['Sharepeak']){
        mysql_query("UPDATE `".$dbtable."` SET Sharepeak = ".floatval($total_share)." WHERE id = ".$data['ID']."");
    }
    
}else{
    mysql_query("UPDATE `".$dbtable."` SET Status = 'Offline' WHERE id = ".$data['ID']."");
    mysql_query("UPDATE `".$dbtable."` SET Users = '0' WHERE id = ".$data['ID']."");
    mysql_query("UPDATE `".$dbtable."` SET Share = '0' WHERE id = ".$data['ID']."");
    }
}
mysql_query("UPDATE `lastupdate` set `time` = now()");
mysql_close($mysql);
########end timer
      $mtime = microtime();
      $mtime = explode(" ", $mtime);
      $mtime = $mtime[1] + $mtime[0];
      $endtime = $mtime;
      $totaltime = ($endtime - $starttime);
      echo 'This page was created in ' .$totaltime. ' seconds.';


?>

Автор: Enyby 30.8.2010, 7:50

Код
if(preg_match('#не поддерживает пинга#',$linie[$i])){

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

Код
$user = explode(' ', $linie[$i]);

$user - совершенно не информативное название переменной для данного случая, возможно стоит заменить на что-то более понятное. Но это больше относиться к стилю написания кода, чем к его работе.

Код
execute($socket, '$Supports NoGetINFO NoHello UserIP2 Feed MCTo HubTopic ClientID MiniSlots GetZBlock ADCGet CHUNK GetCID BotINFO');

Думаю стоит оставить лишь те характеристики, что действительно поддерживаются пингером. Например, GetZBlock и ADCGet служат для скачиваний файлов.

Код
execute($socket, '$Key '.lock2key($user[1],$data['Port']));

Порт следует убрать, так как функция принимает только один параметр, а не два.

Код
case '$Hello':
                    if ($user[1] == $nick) {

Если уж и делаеться проверка, то в случае ее не прохождения надо тоже что-то делать, не правда ли? Иначе зачем она нужна.

Код
execute($socket, '$MyINFO $ALL '.$nick.' Bot by dro <++ V:0.674,M:A,H:1/0/1,S:20>$ $LAN(T3).$alexandr@drozdin.ru$'.$myshare.'$');

На некоторые хабы пингер не зайдет с подстрокой "Bot" в описании пользователя, если там есть админы, которые борются с ботами и ставят фильтры.

Код
execute($socket, '$BotINFO {HubListPinger} hublist pinger');

Вы не проверили того, что хаб поддерживает данную команду, в ответных Supports. Я уже писал об этом.

Код
    $hubinfo[1] = str_replace("<", "<", $hubinfo[1]);
    $hubinfo[1] = str_replace(">", ">", $hubinfo[1]);
    $hubinfo[3] = str_replace("<", "<", $hubinfo[3]);
    $hubinfo[3] = str_replace(">", ">", $hubinfo[3]);

Или часть кода прошла преформатирование при выводе на форум или тут вы делаете что-то не то.

Код
$hubinfo = str_replace( "HubINFO ", "", $hubinfo);

У вас нет гарантий, что переменная $hubinfo будет инциализирована, после выполнения кода находящегося выше.

Код
$hubinfo[3] = str_replace(".px.", " ", $hubinfo[3]);

Некорректное решение в общем случае, так как заменяет везде ".px." на пробел. Хаб PtokaX дописывает данную строку лишь в самый конец, т. е. вам стоит проверять последние 4 символа на предмет соответствия и извлекать подстроку, если это так.

Код
        $hubinfo[1] = $hubname;

Опять же, инициализация переменной не гарантирована. Следите за этим. Ничего страшного в PHP не происходит, только warning'и, которые замедляют работу скрипта, вызывая обращения к логам, но если бы вы писали на C, то все может закончиться куда плачевнее. Помните, что когда вы пишете код, вы порождаете свой стиль, с которым потом будет трудно бороться, если вы смените язык программирования.

Код
array_unique($info);

Вы делаете ошибку вызывая эту функцию. Ознакомтесь с ее действием. Пример ошибки: У двух пользователей размер шары одинаковый до байта, например равне 0 - вы подсчитаете лишь одного из них.

Код
            $total_share=$share+$total_share;
        }
        $total_share=$total_share - $myshare;

Старайтесь, где это возможно, использовать операторы "+=" и "-=".

Код
        mysql_query("UPDATE `".$dbtable."` SET Name = '".$hubinfo[1]."',Descr = '".$hubinfo[3]."',
                     Maxusers = '".$hubinfo[4]."', MinShare = '".$hubinfo[5]."', MinSlots = '".$hubinfo[6]."',
                     MaxHubs = '".$hubinfo[7]."', Soft = '".$hubinfo[8]."'  WHERE id = ".$data['ID']."");

Типичный пример включения не проверенных данных в SQL запрос, может приводит к SQL иньекции, со всеми отсюда вытекающими последствиями. Необходимо все строковые значения пропускать через функцию mysql_real_escape_string, все целочисленные - через intval, а дробные через floatval. Это касается всех MySQL запросов.

Код
    mysql_query("UPDATE `".$dbtable."` SET Users = ".$useri.", Status = 'Online', Share = ".floatval($total_share)." WHERE id = ".$data['ID']."");

Чтобы не терять часть значащих знаков, я предпочитаю с $total_share работать, как со строкой. Преобразование к дробному числу может перевести к потери нескольких значащих знаков. Соответственно для MySQL таблицы нужно указать BIGINT поле для хранения таких чисел, ну или VARCHAR, хотя это и не очень хорошо.

Код
    if ($useri > $data['Userspeak']){

Замечание по стилю именования: "Userspeak" имеет две расшифровки, "user speak" и "users peak", для большей понятности кода такую двойственность лучше не создавать. Например, "usersPeak" или "users_peak".

Код
    mysql_query("UPDATE `".$dbtable."` SET Status = 'Offline' WHERE id = ".$data['ID']."");
    mysql_query("UPDATE `".$dbtable."` SET Users = '0' WHERE id = ".$data['ID']."");
    mysql_query("UPDATE `".$dbtable."` SET Share = '0' WHERE id = ".$data['ID']."");

В данном случае следует выполнять один запрос к БД, а не три. Также, если используется InnoDB в качества движка таблиц, то рекомендуется использовать явно задание транзакций, если число запросов на изменение, составляющих атомарную цепочку, более одного.

Автор: dro 30.8.2010, 9:06

Спасибо большое, щас буду исправлять.

Насчет

Код
array_unique($info);


В $info содержиться не только шара но и ник юзера типа Вася - 123123123
и я не думаю что может быть на хабе 2 одинковых юзера.

Цитата
Или часть кода прошла преформатирование при выводе на форум или тут вы делаете что-то не то.


Форум преформатировал.

Не совсем понял про то, что если у нас не выполниться if ($user[1] == $nick) {

т.е. проверка не нужна?

Ладно пойду налью кофе и буду фиксить все.
По поводу SQL inj вы правы, лень матушка меня на такое подвела. Исправлюсь.

Автор: Enyby 30.8.2010, 10:34

Цитата
array_unique — Removes duplicate values from an array

values, в данном случае, это размер шары пользователей. Зачем вам оставлять только пользователей с уникальным размером шары? Это значение, если отлично от нуля, то вероятность его совпадения у разных пользователей очень мала, но если оно равно нулю, или один пользователь сидит два раза на одном хабе, то вы попросту отсеете его.
Вы и так уже заносите в массив по никнейму как ключу, а одному ключу может соответствовать лишь одно значение массива, так что эта команда совершенно лишняя.

Код
    $hubinfo[1] = str_replace("<", "<", $hubinfo[1]);
    $hubinfo[1] = str_replace(">", ">", $hubinfo[1]);
    $hubinfo[3] = str_replace("<", "<", $hubinfo[3]);
    $hubinfo[3] = str_replace(">", ">", $hubinfo[3]);

Даже если форматирование, такого рода замены можно ускорить, сделав их одновременно, еще до этапа разбивки на части $hubinfo:
Код
    $hubinfo = str_replace(array("<", ">", "HubINFO "), array("<", ">", ""), $hubinfo[1]);
    $hubinfo = explode('$', $hubinfo);
    $hubinfo[3] = str_replace(".px.", " ", $hubinfo[3]);


Код
                case '$Hello':
                    if ($user[1] == $nick) {
                    execute($socket, '$Version 1,0091');
                    execute($socket, '$GetNickList');
                    execute($socket, '$MyINFO $ALL '.$nick.' Bot by dro <++ V:0.674,M:A,H:1/0/1,S:20>$ $LAN(T3).$alexandr@drozdin.ru$'.$myshare.'$');
                    #execute($socket, '$MyINFO $ALL '.$nick.' Bot by dro <FlylinkDC++ V:(r386),M:P,H:1/0/1,S:15>$ $100    $alexandr@drozdin.ru$670969607454$');
                    execute($socket, '$BotINFO {HubListPinger} hublist pinger');
                    }
else {
// some code
}

Просто если ники не совпадут, то вы не отошлете кучу команд, грубо говоря, вы проигнорируете команду хаба и будете ждать у моря погоды. Необходимо делать обработчики всех возможных событий. Если вы делаете if, то он может как выполниться, так и не выполниться. Нужно учитывать оба варианта.

Автор: Enyby 30.11.2010, 1:51

Много релевантных слов. Конкретного хаблиста тут нет, так что добавлять некуда.