| 
 | 
Здравствуйте, гость ( Вход | Регистрация )
|   | 
| 
 | 
|  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 | 5 116 | 30.4.2016, 12:07 Посл. сообщение: feardc | 
|  |  Хаблисты Некоторое количество хаблистов | 9 | Enyby | 13 154 | 17.12.2011, 2:46 Посл. сообщение: Enyby | 
|  | От: Хаблисты От темы с ID: 404 | 0 | absent | 4 051 | 30.11.2010, 1:40 Посл. сообщение: absent | 
|  | От: Хаблисты От темы с ID: 404 | 0 | Accelerator | 4 936 | 21.4.2010, 6:47 Посл. сообщение: Accelerator | 
|  | Хаблисты | 1 | KamoK | 6 585 | 1.12.2009, 11:54 Посл. сообщение: Артём | 
|   | Сейчас: 31.10.2025, 4:52 |