Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.10.2012, 16:52   #1
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию winsock и с++

Сижу вот и разбираю как соединяется клиент с сервером. Использую библиотеки winsock.
вот кое что начертал:
Код:
int PORT = 3724;

WSADATA data;
SOCKET hSocket;
sockaddr_in sock_in;

void main()
{
	if (WSAStartup(0x0202, &data)==0)
	{
		std::cout<<"initialization socket true\n";

		hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
		if (hSocket==INVALID_SOCKET)
		{
			std::cout<<"ERROR OPEN SOCKET\n";
		}

		sock_in.sin_family = AF_INET;
		sock_in.sin_port = htons(PORT);
		sock_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

		int i = bind(hSocket, (sockaddr*)(&sock_in), sizeof(sock_in));
		if (i==0)
		{
			std::cout<<"bind port 3724\n";
		}

		int l = listen(hSocket, SOMAXCONN);
		if (l==0)
		{
			std::cout<<"listen port 3724\n";
		}

/* дальше как я понимаю должно отправляться клиенту что-что?
Или же клиент должен отослать что-то?
*/

	}
	std::cin.get();

}

Вообще какие данные передаются далее?

Или мне надо ждать пока клиент не передаст что то в сокет? Если это так то покажите на примере кода...


добавил такую конструкцию:
Код:
while(true)
		{

			try
			{
				throw -1;
				int bytesReceived = recv(hSocket, buffer, sizeof(buffer), 0);
				std::cout<<bytesReceived;
			}
			catch (int x)
			{

			}
		}
в этоге bytesReceived = -1, то есть при вводе любого логина и пароля клиент ничего не отаслал, хоть и пытался конектиться... Может я не так что то делаю ?


спустя пол часа...
все теперь понял, оказалось создается новый сокет, и конструкция не понадобилась....Буду пока дальше копать...
в данный момент код выглядит так:
Код:
int RS_PORT = 3724;

WSADATA data;
SOCKET hSocket, newSocket;
sockaddr_in sock_in;

void main()
{
	if (WSAStartup(0x0202, &data)==0)
	{
		std::cout<<"initialization socket true\n";

		hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
		if (hSocket==INVALID_SOCKET)
		{
			std::cout<<"ERROR OPEN SOCKET\n";
		}

		sock_in.sin_family = AF_INET;
		sock_in.sin_port = htons(RS_PORT);
		sock_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

		int i = bind(hSocket, (sockaddr*)(&sock_in), sizeof(sock_in));
		if (i==0)
		{
			std::cout<<"bind port 3724\n";
		}

		int l = listen(hSocket, SOMAXCONN);
		if (l==0)
		{
			std::cout<<"listen port 3724\n";
		}

		int k = sizeof(sock_in);
		newSocket = accept(hSocket, (sockaddr*)&sock_in, &k);
		if (newSocket==INVALID_SOCKET)
		{
			std::cout<<"error";
		}
		else
		{
			char buffer[128];
			int bytesReceived;
			std::cout<<"socket true\n";
			bytesReceived = recv(newSocket, buffer, sizeof(buffer), 0);
			std::cout<<bytesReceived;
		}

		//closesocket(hSocket); // закрываем сокет
		//WSACleanup(); // освобождение
	}
	std::cin.get();

}
При вводе логина и пароля bytesReceived стало равно 36.
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 03.10.2012 в 18:26.
lovepsone вне форума   Ответить с цитированием
Старый 03.10.2012, 18:33   #2
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Собственно уже назрел вопрос... Что теперь нужно отправить клиенту, или что нужно отсылать клиенту в ответ?
А также будет ли создаваться новый сокет ?
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 03.10.2012 в 18:49.
lovepsone вне форума   Ответить с цитированием
Старый 03.10.2012, 18:50   #3
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

получил CMD_AUTH_LOGON_CHALLENGE.
отправлять SMD_AUTH_LOGON_CHALLENGE.
оно тебе точно надо?
Evgeniy вне форума   Ответить с цитированием
Старый 04.10.2012, 19:36   #4
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

C windows sock я разобрался... Теперь прошу помощи по sha1. Пытаюсь использовать OpenSSL, нечего не понимаю. Может есть у кого нить книга или что то в этом роде..
__________________
sql-language.ru
lovepsone вне форума   Ответить с цитированием
Старый 16.10.2012, 18:40   #5
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Объясните мне плиз... Получил я пакет CMD_AUTH_LOGON_CHALLENGE
Я так понял кроме логина (еще я смог достать версию клиента, и платформу ОС)с этого пакета можно нечего не брать.
Далее я формирую пакет SMD_AUTH_LOGON_CHALLENGE для отправки клиенту...
Побайтно я формировал поля B,N,g,S. Как теперь формировать поле unk3(записал пока туда нули, но не думаю что это правильно, хотя клиент принимает, отправляет мне пакет и ждет следующего пакета)? За что это поле отвечает?
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 17.10.2012 в 13:55.
lovepsone вне форума   Ответить с цитированием
Старый 16.10.2012, 22:51   #6
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

вообще говоря оттуда все данные нужны.
по какому формату то работаешь? кто такой unk3 и где он в пакете? мы ж не телепаты.

не сочтите за кэпа, но прежде чем постить вопрос, неплохо было бы его самому прочитать (для некоторых раза два-три) и попытаться понять что написано. все ли данные и ссылки включены в вопрос? вот щас что нам предлагается? погуглить порыть формат челленжа и кто есть такой унк3? да никто не будет это делать... вот если бы были все необходимые ссылки в вопросе, что бы можно было тыкнуть и посмотреть, я думаю многие бы нашлись что сказать.

Код:
  T_AUTH_LOGON_CHALLENGE = record // from client
    ErrorCode: byte;
    Size: word;
    Client: string;
    Version1: byte;
    Version2: byte;
    Version3: byte;
    Build: word;
    CPU: longint;
    OS: longint;
    Lang: string;
    TimeZone: longint;
    IP: longint;
    LoginLen: byte;
    Login: string;
  end;
  T_AUTH_LOGON_CHALLENGE_RESPONSE = record // from server
    Answer: byte;
    ErrorCode: byte;
    SRP6_B: array[0..31] of byte;
    SRP6_g_len: byte;
    SRP6_g: array[0..0] of byte;
    SRP6_N_len: byte;
    SRP6_N: array[0..31] of byte;
    SRP6_Salt: array[0..31] of byte;
    SRP6_CRC: array[0..15] of byte;
    Security: byte; // Possible values: 0 - None, 1 - PIN, 2 - Matrix, 4 - Require Security Token
    SecurityPIN_unk1: longint;
    SecurityPIN_unk2: uInt64;
    SecurityPIN_unk3: uInt64;
    SecurityMATRIX_unk1: byte;
    SecurityMATRIX_unk2: byte;
    SecurityMATRIX_unk3: byte;
    SecurityMATRIX_unk4: byte;
    SecurityMATRIX_unk5: uInt64;
    SecurityTOKEN_unk1: byte;
  end;
который из унков интересует?
RomanRom2 вне форума   Ответить с цитированием
Старый 16.10.2012, 23:04   #7
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

вот пример
Код:
User="NINAR1"
aut="NINAR1:NINAR2"
B = B3060A37D50CA642F5C521C2C9A4F76B8FDBF993C1354073BFA96BC25949D04B	32bytes	;Server's public key
g = 07									1byte	
N = B79B3E2A87823CAB8F5EBFBF8EB10108535006298B5BADBD5B53E1895E644B89	32bytes	;modulus
Salt = 731ABA56A18D780915E97E6F076204CBE4A7D9793E1443E5E15A6C80DD95A4D5	32bytes
unk3 = F92CA0BCA6E28295E594D58C4D2536CD                        16bytes
Это SMD_AUTH_LOGON_CHALLENGE пакет
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 16.10.2012 в 23:07.
lovepsone вне форума   Ответить с цитированием
Старый 17.10.2012, 00:12   #8
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

SRP6_CRC
насколько мне известно, клиент читает, но нигде не использует это. следовательно слать здесь мы можем все что угодно. ну, я шлю нули.
RomanRom2 вне форума   Ответить с цитированием
Старый 17.10.2012, 15:49   #9
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

ясно! спасибо! Может есть другие мнения?
....
Далее пытаюсь разбирать... приходит мне пакет в размере 75 байт
Код:
01							AUTH_LOGON_PROOF
			
26 9F FA 00 B8 9E B5 82 83 0A 8E 44 0E 26 0D C5 	A 32 byte
23 03 09 7F 6C 28 92 40 3B 1E F9 A7 54 2C DA 0D

DC CC 67 0A D9 C0 C0 A2 E6 25 A0 A3 92 7D 05 76 	M1 20 byte
16 19 1C 35

6C 5A 98 E8 A7 53 08 4F DC F7 09 B8 F9 1C 4C 84		CRC hash
AA 24 42 00

00							number_of_keys
С ваших слов я так понял CRC нам трогать ненужно. Собственно вопрос какие данные хранятся в A, а какие в М1. И что с ними далее делать ? Я думаю что в M1 хранятся hash данные logina (которые были подсчитаны в SRP6), а вот для чего А я так и не понял.

И еще плиз подскажите..
1. Получил запрос на CMD_AUTH_LOGON_CHALLENGE от клиента
2. отправил CMD_AUTH_LOGON_CHALLENGE клиенту
3. далее получил запрос на CMD_AUTH_LOGON_PROOF (далее пока не получается) от клиента
4. далее думаю что нужно оправить CMD_AUTH_LOGON_PROOF
5. далее думаю что приходит пакет CMD_REALM_LIST
5. далее наверное нужно отправить CMD_REALM_LIST (то есть 0х10 )
и тд...
пакеты CMD_AUTH_RECONNECT_CHALLENGE и CMD_AUTH_RECONNECT_PROOF я как понимаю что ненужно отправлять если все заходит далее норм?
Пока я не могу собрать пакет CMD_AUTH_LOGON_PROOF...
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 17.10.2012 в 16:16.
lovepsone вне форума   Ответить с цитированием
Старый 18.10.2012, 16:58   #10
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Нашел статью по SRP-6 тык ....
там сказано:
Цитата:
При регистрации, клиент вычисляет следующее:
s = random_string() x = H(s, p) v = g^x % N
И присылает серверу три поля:
I = username s = salt v = password verifier
В нашем случаи клиент присылает только I = username, salt заполняем рандомно в размере 32 байт, далее зная хеш I и s(salt) находим x, только тогда находим v , зная x и N.
В общем я запутался...

и еще вопрос: Если я клиенту присылаю не верные первые данные(CMD_AUTH_LOGON_CHALLENGE), то он должен мне присылать что то в ответ? Вопрос возник потому - что у меня при сравнении M1(которые прислал клиент на подтверждение авторизации) и M (вычисленные мною) не совпадают, хотя вычисляю все верно.
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 18.10.2012 в 17:22.
lovepsone вне форума   Ответить с цитированием
Старый 18.10.2012, 23:59   #11
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

по поводу "что нужно отправить далее" - нужно почитать спецификацию SRP6. ну собственно начали читать...

клиент не валидирует данные, это делает сервер. клиент просто присылает свою часть данных на сервер, а сервер принимает решение пускать / не пускать. и сервер будет отвечать клиенту "окей" / "давай до свидания".

если хеши не совпадают, значит вычислено неверно. я кэп? есть же куча готового кода, и сишный мангос, и мангос на джаве, и дельфевый сандбок. неужели там непонятно написано? и протокол читается, и какие данные следует отправлять, и алгоритмы. сидите ведь на всем готовом. тогда, в 2005ом этого ничего не было.

если у вас столько вопросов на этом этапе, то сколько же их будет дальше... помню, авторизацию я осилил за пару недель практически без вопросов. по настоящему вопросы стали возникать после входа в мир, до сего момента - все игрушки. хоть и трудоемкие.

Последний раз редактировалось RomanRom2; 19.10.2012 в 00:03.
RomanRom2 вне форума   Ответить с цитированием
Старый 19.10.2012, 08:51   #12
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Для меня готовое брать - не вариант. Уже дашел до выбора реалма. Спасибо вашему сендбоксу. Если брать готовое с мангоса, то придется рассматривать классы такие как ByteBuffer, BufferedSocket и тд. Я же пытаюсь своими силами. Сейчас начал разбирать ACE (ADAPTIVE Communication Environment), так как winsock мне посоветовали что не удобно использовать, и думаю добавить себе эту библиотечку. Пока пыркаюсь на месте из за плохого знания английского, но думаю что разберусь.
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 19.10.2012 в 08:53.
lovepsone вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 00:32. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot