|
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
![]()
Сообщение
#1
|
|
![]() Абсолютный новичок Группа: Пользователи Сообщений: 3 Регистрация: 29.8.2014 Пользователь №: 12 495 Спасибо сказали: 0 раз ![]() |
Добрый день, решил изучить протокол NMDC и быстренько проверить свои знания.
Использовал сначала python третей ветки, но столько костылей пришлось делать... Перешел на вторую. Но не получается пройти дальше по плану! CODE # -*- coding: utf-8 -*- import socket,re nmdc=socket.socket(socket.AF_INET,socket.SOCK_STREAM) nmdcServer = "192.168.0.2" nmdcPort = 411 nmdc.connect((nmdcServer, nmdcPort)) def senD(data): print u'Клиент > ',data[:40] nmdc.send(data) def L2K(lock): lock = re.findall('\$Lock[\s](.*?)[\s]', lock)[0] key = {} for i in xrange(1, len(lock)):key[i] = ord(lock[i]) ^ ord(lock[i-1]) key[0] = ord(lock[0]) ^ ord(lock[len(lock)-1]) ^ ord(lock[len(lock)-2]) ^ 5 for i in xrange(0, len(lock)):key[i] = ((key[i]<<4) & 240) | ((key[i]>>4) & 15) out = "" for i in xrange(0, len(lock)):out += unichr(key[i]) out = out.replace(u'\0', u'/%DCN000%/').replace(u'\5',u'/%DCN005%/').replace(u'\44', u'/%DCN036%/') out = out.replace(u'\140', u'/%DCN096%/').replace(u'\174',u'/%DCN124%/').replace(u'\176', u'/%DCN126%/') return out.encode('utf-8') BR=0 while True: data = nmdc.recv(2048) print u'Хаб > ',data #if "$Lock" in data: # senD("$Key %s|$ValidateNick %s|" % (L2K(data), 'test')) РАЗРЫВ СОЕДИНЕНИЯ! if "$Lock" in data: senD("$Supports QuickList|$Key %s|" % (L2K(data))) if data == '':# защита от принтовки пустых строк при разрыве соединения BR+=1 if BR==10:break """ Хаб: --> $Lock [Код] Pk=[PrimaryKey]| Клиент: --> $Key [Рассчитанный_ключ]|$ValidateNick [Ник]| Хаб: --> $HubName [Имя_хаба]|$Hello [Ник]| Клиент: --> $Version [Версия]|$GetNickList|$MyINFO [Строка]| Хаб: --> Отсылает список пользователей. """ Сначала думал, что может ключ неверный, но при отправки senD("$Supports QuickList|$Key %s|" % (L2K(data))) Получал: $Supports QuickList| 20 Значит с ним все в порядке, я уже не знаю... Может что-то не так с "$Key %s|$ValidateNick %s|" Помогите пожалуйста разобраться с ним. |
|
|
![]()
Сообщение
#2
|
|
![]() Главный ра******й тут... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз ![]() |
Не знаю, сильно ли помогу. Может я уже сильно отстал от хабов, но:
1. хабы работают не в утф (поправьте, если уже не так) 2. очень поможет описанные тут примеры: Описание Протокола NMDC 3. есть готовые примеры на пхп, можете на них опираться (искать на форуме), как пример: Public PHP hublist by Enyby |
|
|
![]()
Сообщение
#3
|
|
![]() Абсолютный новичок Группа: Пользователи Сообщений: 3 Регистрация: 29.8.2014 Пользователь №: 12 495 Спасибо сказали: 0 раз ![]() |
Не знаю, сильно ли помогу. Может я уже сильно отстал от хабов, но: 1. хабы работают не в утф (поправьте, если уже не так) 2. очень поможет описанные тут примеры: Описание Протокола NMDC 3. есть готовые примеры на пхп, можете на них опираться (искать на форуме), как пример: Public PHP hublist by Enyby Я кстати это тоже подозреваю, но странно то, что при quick ключ подходит, хотя он закодирован в UTF-8, надо еще потестить мне, потом отпишусь о результатах! Спасибо за ответ =) Я брал оттуда инфу как раз таки, кстати в локе для питона имеются символы как: u'', что означает кодировку именно в UTF Странно это как-то... |
|
|
![]()
Сообщение
#4
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
Обратите внимание на характеристику QuickList.
Если хаб поддерживает данную характеристику, и вы отсылаете её на хаб, то последовательность входа немного другая. В частности, на хаб не следует отсылать команду $ValidateNick. см. Последовательность входа на хаб, который поддерживает характеристику QuickList |
|
|
![]()
Сообщение
#5
|
|
![]() 7 квадратиков ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз ![]() |
странно то, что при quick ключ подходит, хотя он закодирован в UTF-8 Если тестируется на птоке, то там правильность ключа не проверяется у клиентов, поддерживающих расширения протокола. |
|
|
![]()
Сообщение
#6
|
|
![]() Абсолютный новичок Группа: Пользователи Сообщений: 3 Регистрация: 29.8.2014 Пользователь №: 12 495 Спасибо сказали: 0 раз ![]() |
Спасибо, подумаю еще, но попозже, недельки через две. Просто счастлив буду если все с ходу получиться, конечно, перед этим начитавшись документации и вдохновленный новыми силами на подвиги
![]() И да, просто безумно рад, что документация у Вас на русском языке и причем полная! Порой забугорные читать противно, но они содержат много всего полезного =) |
|
|
![]()
Сообщение
#7
|
|
![]() Site Reliability Engineer ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз ![]() |
Полная документация по nmdc протоколу? Есть тут же на форуме.
Кстати. У меня тут есть запил nmdc пингера на питоне втором. Ваял как-то давным на досуге. Нельзя отнести к стейблу, но работал нормально с ptokax, verlihub, rushub. C flexhub были проблемы. Дальше не помню тестировал или нет. Допиливать там надо тоже не мало, и ваще лучше перевести на какой нить twisted. Щас там голый сокет. Могу как нить куда нить скинуть. зы. Полурабочий самопальный адц пингер есть на питоне даже. |
|
|
![]() ![]() |
Похожие темы
![]() |
Сейчас: 8.9.2024, 2:48 |