Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
hAuthD и неправильный сокет
#1
вопрос закрыт, причина была в банальной невнимательности и к сокетам никакого отношения не имела

Есть сервер аутентификации 'hAuthD', который, почему-то, не очень дружит с .NET-сокетами. Хотя, скорее, я просто не учитываю какую-то специфику и потому нуждаюсь в помощи коллективного разума.

Т.е. этот auth-сервер корректно обрабатывает запросы от нативного клиента, от тестового модуля на Pascal, от тестового модуля на Java. Но тот же самый код, реализованный на .NET, провоцирует странное поведение.

Дабы исключитль некоторые варианты:
1. Инициализирующий пакет от сервера обрабатывается корректно, т.е. получается в полном объёме (186 байт), раскодируется по blowfish константным ключом, разксоривается, после чего из него извлекается ID-сессии, RSA и bf-ключ для последующего шифрования. Ответный пакет для сервера (42 байта) также формируется корректно (делал дампы пакетов от других клиентов и прогонял через "свою" реализацию для сравнения).
2. Тестовое окружение полностью идетнично. Файрвол ничего не режет. Антивирусы выключены.
3. Опенсурсный .NET-бот, который есть на GIT-е, демонстрирует аналогичное ошибочное поведение.

Типовой проблемный сценарий:
1. Открыть подключение.
2. Получить 186 байт инит-пакета.
3. Отправить пакет на сервер.
4. Попытаться считать ответ сервера.

На п.4. сокет задумывается на несколько секунд и возвращает '0', сигнализирующий, что сервер закрыл подключение.

При этом, если в п.3, вместо корректного пакета, отправить какой-нибудь хлам, то сервер рвёт соединение мгновенно.

В попытках разобраться, установил на сервер сниффер и обнаружил, что когда идёт работа через .NET-сокеты, на сервер улетают какие-то дополнительные системные TCP-пакеты, которые я сам явно не отправляю и, вроде бы, установкой никаких опций в коде не провоцирую.

На приложенном скрине пример такого пакета. При работе через другие клиенты этот пакет отсутствует. Хотя, вероятно, проблема и не в нём, но пока это единственное отличие, которое мне удалось выявить.

Ещё была мысль, что .NET-сокет вовсе не отправляет маленький пакет, т.к. он маленький и система ждёт ещё немного данных, чтобы отправить их одним общим пакетом. Однако, сниффер на стороне сервера показывает получение пакета размером 42 байта. И опция сокета "NoDelay", которая, судя по документации, имеет к этому прямое отношение, на результате никак не сказывается.


Файлы вложений
.jpg   packet.jpg (Размер: 65.11 KB / Загрузок: 11)
Ответ
#2
В общем, сокет правильный, программист неправильный. В тестах на дампах использовался исправленный код, а при реальных коннектах предыдущая багнутая версия. Вопрос более не актуален, сорь кому пришлось эту простыню читать.
Ответ
#3
Ну чудес не бывает и в опенсорсном боте есть ошибки, которые приводили с ошибкам при коннекте в некоторых случаях.
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#4
Zubastic Написал:Ну чудес не бывает и в опенсорсном боте есть ошибки, которые приводили с ошибкам при коннекте в некоторых случаях.
Дабы не наговаривать, я не до конца разобрался, почему он не работает. Скорее всего там всё ок, просто версия протокола отличается, потому и поведение было так похоже на то, когда я кривые пакеты слал.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  hAuthD Hett 2 2,048 02-21-2019, 08:06 PM
Последний пост: mercury320
  hAuthD HeyYo 5 3,193 02-21-2019, 10:00 AM
Последний пост: ownness
  Логин сервер и hAuthD Zubastic 2 1,616 12-20-2014, 07:58 PM
Последний пост: Zubastic
  Соединение с PTS hAuthD Krasavella 6 4,337 05-31-2013, 10:29 AM
Последний пост: Hint

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)