Анализ ответа от PtokaX, Вопрос по сокетам |
Здравствуйте, гость ( Вход | Регистрация )
Анализ ответа от PtokaX, Вопрос по сокетам |
23.2.2010, 0:45
Сообщение
#1
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Здравствуйте, пишу программу под C#, цель - это получить данные от хаба (в частности количество юзеров, размер шары). Для этого поставил PtokaX - чисто для анализа команд посылаемых моей программой. В программе создаю объект сокета и подсоединяюсь по протоколу (TCP/UDP) к указаному мною IP и порту, после посылки любой команды в окне администратора PtokaX выплывает такое: [00:02] x User removed: <unknown> (Socket 536). Я подозреваю, что необходимо предварительно "представиться" cерверу, но все попытки не успешны. Подскажите, чем подобные ответы сервера могут быть вызваны?
Точнее даже при обычном коннекте в админке PtockaX выдает [00:41] x User removed: <unknown> (Socket 524) |
|
|
23.2.2010, 1:02
Сообщение
#2
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Изучай протокол: http://mydc.ru/topic915.html
|
|
|
23.2.2010, 1:05
Сообщение
#3
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
У меня есть этот топик, запросы подобно этому: $Lock EXTENDEDPROTOCOL[некий_ключ_хаба] Pk=PtokaX не воспринимаются
|
|
|
23.2.2010, 11:24
Сообщение
#4
|
|
Местная ТехПоддержка Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз |
|
|
|
23.2.2010, 12:13
Сообщение
#5
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Cпасибо, я связался с человеком, может подскажет...
|
|
|
23.2.2010, 12:35
Сообщение
#6
|
|
InstaHub dev. Группа: Пользователи Сообщений: 91 Регистрация: 25.2.2009 Пользователь №: 2 377 Спасибо сказали: 10 раз |
Cпасибо, я связался с человеком, может подскажет... Помнится, я тоже сталкивался с этим. Как отлаживал - уже точно не помню, единственное что помню - так это то, что вставлял отладочную печать в код самого PtokaX (в nix-версию). где-то тут на форуме были исходники маленькой проги HubLink для линковки хабов, которую я когда-то делал. Сравните вашу процедуру соединения и то что написано там. Может быть мне удастся вспомнить, где там были грабли... Но вообще когда он пишет User removed - это значит что он не получил нужного ответа (AFAIK). А вот что конкретно ему не понравилось - без отладки мне тогда понять не удалось. А дырявая башка уже всё забыла Если у меня сохранился отладочный код - выложу... |
|
|
23.2.2010, 12:45
Сообщение
#7
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
2 dmvn
Здравствуйте, ХабЛин программку глянул (она правда на С++), в моем конкретном случае, я создаю объект СОКЕТ. И конечную точку (Ip:Port). Протокол для соединения либо TCP, либо UDP...дак вот, к моему локальному хабу коннектится, но через некоторое время (команды я никакие не отсылаю), в птоке пишет [12:40] x User removed: <unknown> (Socket 536), а в Админке: Accepted Connectio - прибавляется 1, ну т.е. Соединение идет, а через некоторое время выкидывает меня (Сlosed Connection - прибавляется 1). Я подозреваю, что нужно в этот момент получить/отправить данные (т.е. в момент данного промежутка соединения) В том-то и вопрос, как реагирует ПТОха на мою попытку? Если при соединеии он запрашивает данные Мол Кто я такой? Или же ему само соединение (в частности используемый протокол (TCP/UDP)) не нравится |
|
|
23.2.2010, 12:56
Сообщение
#8
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
В протоколе же чётко описаны все шаги входа на хаб. Нужно только внимательно прочитать.
Кроме всего прочего, для того чтобы находится на хабе нам нужно время от времени отсылать на хаб команду пинга (пустую команду - команду, состоящую только из одного разделителя протокола | ). |
|
|
23.2.2010, 13:03
Сообщение
#9
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
В протоколе же чётко описаны все шаги входа на хаб. Нужно только внимательно прочитать.
Кроме всего прочего, для того чтобы находится на хабе нам нужно время от времени отсылать на хаб команду пинга (пустую команду - команду, состоящую только из одного разделителя протокола | ). 1. Мы соединяемся с хабом (не отсылаем при соединении ничего, а ждём ответа от хаба). Ну как бы соединение не получается, закрывает он мою попытку. Попытка рубится не сразу, а через некоторое время...и как я вижу по потоку, он (Хаб) ничего мне не отсылает. Может есть программы, что-то типа снифера, чтобы глянуть пакеты идущие от хаба мне? |
|
|
23.2.2010, 13:15
Сообщение
#10
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ну раз не получается соединиться, то смотри причину в ошибке сокета.
Я так понимаю используется winsock? Соединение нужно устанавливать исключительно по протоколу TCP, никаких UDP! Цитата и как я вижу по потоку, он (Хаб) ничего мне не отсылает. по какому ещё потоку? Лови то что тебе прислал хаб функцией recv. |
|
|
23.2.2010, 13:29
Сообщение
#11
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Объект (С#):
Socket Sock = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); Тут впринципе все понятно, endpoint - cоздает конечную точку вида Ip:Protocol Похоже подцепил ответ от хаба: "$Lock EXTENDEDPROTOCOLe=nHlsuM`EX[SVsG2tbw1TXlcxAwin Pk=PtokaX|" Это и есть ключ, теперь его нужно обратно отослать :-)...так Объект (С#): Socket Sock = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); Тут впринципе все понятно, endpoint - cоздает конечную точку вида Ip:Protocol Похоже подцепил ответ от хаба: "$Lock EXTENDEDPROTOCOLe=nHlsuM`EX[SVsG2tbw1TXlcxAwin Pk=PtokaX|" Это и есть ключ, теперь его нужно обратно отослать :-)...так Класс сокет, он создает свой поток |
|
|
23.2.2010, 13:32
Сообщение
#12
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ну вот. Хаб тебе отсылал, а ты просто видимо не ловил то, что он тебе отсылал.
Хаб отсылает тебе $Lock и ждёт от тебя $Key, а ты молчишь, поэтому хаб закрывает с тобой соединение через некоторое время ожидания. |
|
|
23.2.2010, 13:40
Сообщение
#13
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Видите в чем дело, я ловил конструкцией :
byte[] remdata = { }; Sock.Receive(remdata); Сокет - это Объект класса...и поидее он должен был подцепить данные от хаба. Хотя не ловил. Оказывается, необходимо действовать по такому: Кстати ответ от хаба идет в кодировки ASCII, хотя в документации к протоколу ADC написано : The protocol requires that all text must be sent as UTF-8 encoded Unicode, normalized in form C. Я немного не понимаю, как свзяан TCP и ADC ? |
|
|
23.2.2010, 13:49
Сообщение
#14
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
А при чём тут вообще ADC?
Хаб PtokaX работает на NMDC протоколе. Это разные протоколы. А TCP - это сетевой протокол, который нужен для передачи данных по сети. А уже эти данные содержат в себе NMDC протокол. Вообще, как так можно что-то писать, не разобравшись даже для чего нужен TCP протокол?)))) |
|
|
23.2.2010, 15:14
Сообщение
#15
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
>>PtokaX работает на NMDC.
Ок, понял :-) Cпасибо за помощь, вы сюда загляните еще попозже:-) Ловлю $Lock: $Lock EXTENDEDPROTOCOL\\3xL@dKO:xJ3Aepet=d\\PG905pGwin Pk=PtokaX| Т.е. ключ как я понимаю будет такой: $Key \\3xL@dKO:xJ3Aepet=d\\PG905pGwin| Соединение: [15:18] <unknown> (ip) > $Key ?raUyUbfx3dl@ye0YSvAGtK]ncDwin| [15:18] x User removed: <unknown> (Socket 444) Однако, если посмотреть "обычное" рукопожатие внешнего клиента и хаба, то ключ (он конечно же другой) выглядит так: $Key tСА° A С±±АА0rCЃ'Ђ·бv–ЕГуSв0BCҐ·/%DCN096%/’‘сW·бp| Кодировка как я понимаю не ASCII и что за последовательность tСА° - ? она постоянно присутсвует в ключе других юзеров |
|
|
23.2.2010, 15:35
Сообщение
#16
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Скорее всего такая последовательность есть всегда ввиду того что строка Lock содержит в себе всегда в начале EXTENDEDPROTOCOL
Алгоритм создания ключа можешь найти в описании протокола на этом форуме. Еще я знаю что хабы порой не проверяют ответ клиента, но это лишь слухи |
|
|
23.2.2010, 15:43
Сообщение
#17
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ключ нужно рассчитывать по параметру команды $Lock, а не тупо отправлять параметр команды $Lock!
Алгоритм расчёта ключа опять же смотри в протоколе: http://mydc.ru/ipb.html?act=findpost&pid=19477 Кроме этого, вместе с ключом нужно сразу же отослать и команду $ValidateNick. Код $Key[рассчитанный_по_параметру_команды_lock_ключ]|$ValidateNick nick|
|
|
|
23.2.2010, 15:48
Сообщение
#18
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
Спасибо, но мне нужно всего лишь кодировку в которой необходимо пересылать этот ключ обратно ПтоКе. Ведь принятая команда $Lock - уже содержит зашифрованную последовательность (tСА° < ключ> бp|). Я это к тому, что в моем ответе ПтоКе содержится на конце win|, и ключ отсылается в кодировке ACSII, а внешние клиенты шлют ключ как-то иначе
|
|
|
23.2.2010, 15:52
Сообщение
#19
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Команда $Lock не содержит ключа.
Она содержит лишь код, по которому нужно по известному алгоритму определить ключ. Код $Lock [код]| $Key lock2key([код])| где lock2key - это функция (алгоритм), которая преобразует код команды lock в ключ |
|
|
23.2.2010, 16:08
Сообщение
#20
|
|
Начинающий Группа: Пользователи Сообщений: 20 Регистрация: 23.2.2010 Пользователь №: 6 163 Спасибо сказали: 0 раз |
А сам алгоритм lock2key есть, а то я давно С++ не пользовал.
|
|
|
Похожие темы
|
Сейчас: 23.11.2024, 17:21 |