Хаблисты |
Здравствуйте, гость ( Вход | Регистрация )
Хаблисты |
4.11.2009, 15:18
Сообщение
#21
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Код <?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 мне рвут соединение без какого-либо ответа. |
|
|
5.11.2009, 11:15
Сообщение
#22
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Цитата Ибо после $BotINFO мне рвут соединение без какого-либо ответа. Так и должно быть. Только перед отключением хаб должен отправить команду $HubInfo с информацией о хабе, но только в том случае, если ты не забыл указать в $Supports поддержку $BotInfo/$HubInfo. |
|
|
5.11.2009, 12:30
Сообщение
#23
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Кстати, это зависит от хаба. Некоторые закрывают соединение, а некоторые нет))
|
|
|
5.11.2009, 14:04
Сообщение
#24
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Спасибо, помогло. Неплохо бы указать это в теме описания протокола, ибо там я ничего про эту характеристику не нашел.
|
|
|
5.11.2009, 18:56
Сообщение
#25
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Добавил в описание протокола.
|
|
|
6.11.2009, 10:49
Сообщение
#26
|
|
Продвинутый участник Группа: Пользователи Сообщений: 155 Регистрация: 11.1.2009 Пользователь №: 1 772 Спасибо сказали: 29 раз |
Цитата Вопросы по порядку: 1. Народ, кто знает какие хаблисты, акромя знаменитого dchublist.ru? 2. Какие функции нужны публичному хаблисту? 3. Что если нам сделать свой хаблист? 4. Как думаете, это трудно? big_smile.gif 5. Кто поможет?)) 6. Я совсем спятил? 1. не знаю, да и не искал особо. 2. тут надо пофантазировать на тему "а круто бы было, если бы..", а потом к этому списку применить "а надо ли оно вообще такое" 3. можно. или кто-то запретил? ) 4. мне кажется, тут придумать и продумать функции - основная задача.. 5. чем смогу- помогу. а могу немного MySql, php, jQuery, ajax. 6. ммм... не знаю |
|
|
6.11.2009, 14:06
Сообщение
#27
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Мне кажется, HackFresse, что ты не читал пост #21. Там написан код PHP, который обеспечивает получение с хаба его названия, топика и количество народа, на нем присутствующего. После небольших изменений можно считать и шару, только это будет достаточно медленно. Поэтому ответы на вопросы 3 и 4 уже есть.
|
|
|
6.11.2009, 21:36
Сообщение
#28
|
|
AmxModx Scripter Группа: Пользователи Сообщений: 302 Регистрация: 2.12.2008 Из: Королев Пользователь №: 1 283 Спасибо сказали: 127 раз |
Помойму делать отдельно пингер смысла нету, так как он получает не самую важную информацию, пользователям важнее какая сейчас на хабе шара и сколько там народу, надо сразу делать обходчик как клиента, что бы он считал шару и пользователей, и делать его на php - не самый лучший вариант
|
|
|
6.11.2009, 23:22
Сообщение
#29
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Отлично. Мне вот только интересно на чем, и как ты это забросишь на хостинг?
PS Приведенный выше код позволяет считать пользователей, получать общую шару, мотд топик и т. д. возможности практически безграничные. PPS Пробовал реализовать на неблокирующих сокетах, но ничего хорошоего не вышло, да и, в добавок, грузит процеесор под самую завязку. |
|
|
6.11.2009, 23:47
Сообщение
#30
|
|
Местная ТехПоддержка Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз |
perl & python?
|
|
|
6.11.2009, 23:49
Сообщение
#31
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Тогда в чем проблема? Я вроде видел где-то тут на перле такого рода чудо.
|
|
|
7.11.2009, 0:10
Сообщение
#32
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Согласен с Романовым, а забрасывается на хостинг по средствам бд. Пишем программу, которая делает обход серваков со скидывание инфы в бд, а из бд уже можно хоть куда эту инфу поместить или использовать в каких-либо других целях. В итоге, не ограниченные возможности, достаточно быстро и не нагрузочно.
По поводу неблокирующих сокетов, то процессор грузится на 100% вероятнее всего из-за того, что стоит маленькая задержка между циклами. Когда нагрузки на сервер нет никакой, он концентрируется на обрабатывании огромного числа циклов, что и приводит к загрузке процессора. |
|
|
7.11.2009, 0:14
Сообщение
#33
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Тогда вообще можно не корячится. Где-то постоянно работает грейлинк или другой дс в поддержкой LUA, на нем крутится скрипт который по таймеру в MySQL складывает информацию и все.
|
|
|
7.11.2009, 0:18
Сообщение
#34
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Думаю использование клиента с различными прибамбасами тоже не лучший вариант, тем более за эту работу опять же отвечает скрипт, что опять же не есть хорошо в смысле нагрузок, да и вообще стабильной работы.
|
|
|
7.11.2009, 1:09
Сообщение
#35
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
По-моему это лучше чем писать свой DC. Тем более от скрипта зависят совсем не критичные данные, так что не вижу тут проблемы.
|
|
|
8.11.2009, 13:06
Сообщение
#36
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
По поводу неблокирующих сокетов, то процессор грузится на 100% вероятнее всего из-за того, что стоит маленькая задержка между циклами. Когда нагрузки на сервер нет никакой, он концентрируется на обрабатывании огромного числа циклов, что и приводит к загрузке процессора. Спасибо. Разобрался, теперь все работает раз в 15 быстрее. |
|
|
20.4.2010, 16:10
Сообщение
#37
|
|
Developer Группа: Модераторы Сообщений: 541 Регистрация: 11.11.2008 Пользователь №: 1 075 Спасибо сказали: 244 раза |
|
|
|
20.4.2010, 17:11
Сообщение
#38
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Вариантов два. Первый - использовать через некоторое время функцию пингера (смотри функцию протокола $BotINFO), второй - неявный, программу смотреть по ключу присылаемому для проверки, в большинстве случаев он специфичный для каждого хаба, а общую шару считать вручную через получение всех $MyINFO пользователей через $GetNickList и последующего сложения. Сразу скажу, что совсем не обязательно что на одного пользователя придет одно $MyINFO, есть скрипты пытающиеся переопределить какие-то значения, поэтому приходят несколько $MyINFO на одного пользователя. Я использовал для этого map массив.
|
|
|
20.4.2010, 17:28
Сообщение
#39
|
|
Developer Группа: Модераторы Сообщений: 541 Регистрация: 11.11.2008 Пользователь №: 1 075 Спасибо сказали: 244 раза |
Уже пробывал это делать самостоятельно, никак не могу это всё вытянуть :( . Можешь код кинуть, если не жалко?
|
|
|
20.4.2010, 17:34
Сообщение
#40
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Полный код я давать не буду. Дам часть, только боюсь что он вырван из контекста и многое не будет понятно. К слову программу я определяю именно через $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; |
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
От: Хаблисты От темы с ID: 5075 |
2 | feardc | 4 480 | 30.4.2016, 12:07 Посл. сообщение: feardc | |
Хаблисты Некоторое количество хаблистов |
9 | Enyby | 11 852 | 17.12.2011, 2:46 Посл. сообщение: Enyby | |
От: Хаблисты От темы с ID: 404 |
0 | absent | 3 647 | 30.11.2010, 1:40 Посл. сообщение: absent | |
От: Хаблисты От темы с ID: 404 |
0 | Accelerator | 4 504 | 21.4.2010, 6:47 Посл. сообщение: Accelerator | |
Хаблисты | 1 | KamoK | 6 066 | 1.12.2009, 11:54 Посл. сообщение: Артём |
|
Сейчас: 23.12.2024, 13:29 |