Показать сообщение отдельно
Старый 12.10.2011, 12:19   #3
Пользователь
 
Регистрация: 17.12.2010
Сообщений: 37
Сказал Спасибо: 13
Имеет 1 спасибку в 1 сообщении
glukmaker пока неопределено
По умолчанию

За ссылки - спасибо.
Но все равно пока я ничего не добился...

Делал все так:
В модуле Blowfish исправил:
Код:
...
L2BlowFish = class
...
далее делаю так:
Код:
type TRequestAuthLogin = packed record
   length:word;
   case byte of
   0:(
      s1:byte;
      login:packed array[1..14] of char;
      pass:packed array[1..16] of char;
      s2:byte;
      s3:cardinal;
      s4:cardinal;
      checksum:cardinal;
      s5:cardinal;
      );
   1: (
      buf:packed array[1..48] of byte; // для удобства криптования
       );
   2: (
      fch:packed array[1..12] of cardinal;  // для удобства вычисления сhecksum
       )
   end;
...

var
...
  login:string='testlogin';
  password:string='testpass';

const
   Token:string=#$5F#$3B#$35#$2E#$5D#$39#$34#$2D#$33#$31#$3D#$3D#$2D#$25#$78#$54#$21#$5E#$5B#$24#$00;

...



function CheckSum(data:array of cardinal):cardinal;
var
 i:integer;
begin
  result:=0;
  for i:=low(data) to high(data) do Result:=result xor data[i];
end;



procedure TForm1.Button3Click(Sender: TObject);
var
 str:TRequestAuthLogin;
 var i: integer;
begin
 str.length:=SIZEOF(str);
 str.s1:=0;
 str.s2:=8;
 str.s3:=0;
 str.s4:=0;
 for i:=1 to 14 do
  if i>length(login)
    then str.login[i]:=chr(0)
    else str.login[i]:=login[i];
 for i:=1 to 16 do
  if i>length(password)
    then str.pass[i]:=chr(0)
    else str.pass[i]:=password[i];
 str.checksum:=0;
 str.s5:=0;
 showdata(str, sizeof(str));
 str.checksum:=CheckSum(str.fch);
 showdata(str, sizeof(str));
  
  With L2BlowFish.Create do
   try
     Init(Token,length(Token));
     bfEncode(str.buf,length(str.buf));
   finally
     free;
   end;

  showdata(str, sizeof(str));  // отображение пакета в мемо

 ClientSocket1.Socket.SendBuf(str,sizeof(str));
end;
Получается:
Код:
Сформированный пакет:
32 00 00 74 65 73 74 6C 6F 67 69 6E 00 00 00 00 
00 74 65 73 74 70 61 73 73 00 00 00 00 00 00 00 
00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 

Добавлена checksum:
32 00 00 74 65 73 74 6C 6F 67 69 6E 00 00 00 00 
00 74 65 73 74 70 61 73 73 00 00 00 00 00 00 00 
00 08 00 00 00 00 00 00 00 00 19 76 0D 18 00 00 
00 00 

Зашифровано BlowFish:
32 00 E1 AC FE 48 16 7F 8A 9B 31 06 F1 1B 6A 2E 
82 05 7A DE 27 3E 85 7D E9 68 2B 22 2D EF 7B 76 
1F 2F 41 C5 1A 43 EE E2 02 77 52 DF 15 33 46 C5 
6B 5C
И все равно сервер ничего мне не присылая рвет соединение.

Вот что показывает снифер (тут правда с IP и ТСP-заголовками):
Код:
Вот, что получается, если работать с клиентом, вводя те же логин и пароль:

Packet ID: 13    TTL: 119
Packet size: 51    bytes type: TCP
Source IP      :    195.42.69.24: 2106
Destination IP :      10.11.3.11: 3257
------------------------------ Packet dump -----------------------------------
000000 45 00 00 33 77 30 00 00 | 77 06 B7 3C C3 2A 45 18     E..3w0..w..<.*E.
000010 0A 0B 03 0B 08 3A 0C B9 | DF C4 C6 17 5B 6E 00 0B     .....:......[n..
000020 50 18 FD 20 83 0B 00 00 | 0B 00 00 32 13 67 6D 5A     P.. .......2.gmZ
000030 78 00 00                                              x..


==============================================================================
Packet ID: 14    TTL: 128
Packet size: 90    bytes type: TCP
Source IP      :      10.11.3.11: 3257
Destination IP :    195.42.69.24: 2106
------------------------------ Packet dump -----------------------------------
000000 45 00 00 5A 3D 34 40 00 | 80 06 A8 11 0A 0B 03 0B     E..Z=4@.........
000010 C3 2A 45 18 0C B9 08 3A | 5B 6E 00 0B DF C4 C6 22     .*E....:[n....."
000020 50 18 FF F4 4F 78 00 00 | 32 00 C0 C8 F0 18 F0 10     P...Ox..2.......
000030 1E 9C 21 DD 8D 8D 64 24 | 8B 52 66 20 26 8A DE BF     .!...d$.Rf &...
000040 83 96 43 C6 34 40 6D AE | 0A 76 41 61 6F 5C 4B BD     ..C.4@m..vAao\K.
000050 6F A5 C2 AA 4D DA FE 17 | 4A 27                       o...M...J'

==================================================================================

А это получается, если я вручную формирую и отправляю:

Packet ID: 5     TTL: 119
Packet size: 51    bytes type: TCP
Source IP      :    195.42.69.24: 2106
Destination IP :      10.11.3.11: 3263
------------------------------ Packet dump -----------------------------------
000000 45 00 00 33 25 9C 00 00 | 77 06 08 D1 C3 2A 45 18     E..3%...w....*E.
000010 0A 0B 03 0B 08 3A 0C BF | 31 27 7F EA 49 7F CC 06     .....:..1'.I..
000020 50 18 FD 20 1B BF 00 00 | 0B 00 00 C7 0F D7 12 5A     P.. ..........Z
000030 78 00 00                                              x..


==============================================================================
Packet ID: 6     TTL: 128
Packet size: 40    bytes type: TCP
Source IP      :      10.11.3.11: 3263
Destination IP :    195.42.69.24: 2106
------------------------------ Packet dump -----------------------------------
000000 45 00 00 28 3D 99 40 00 | 80 06 A7 DE 0A 0B 03 0B     E..(=.@.........
000010 C3 2A 45 18 0C BF 08 3A | 49 7F CC 06 31 27 7F F5     .*E....:I..1'.
000020 50 10 FF F4 BE EB 00 00                               P.......


==============================================================================
Packet ID: 7     TTL: 128
Packet size: 90    bytes type: TCP
Source IP      :      10.11.3.11: 3263
Destination IP :    195.42.69.24: 2106
------------------------------ Packet dump -----------------------------------
000000 45 00 00 5A 3D 9A 40 00 | 80 06 A7 AB 0A 0B 03 0B     E..Z=.@.........
000010 C3 2A 45 18 0C BF 08 3A | 49 7F CC 06 31 27 7F F5     .*E....:I..1'.
000020 50 18 FF F4 90 FA 00 00 | 32 00 E1 AC FE 48 16 7F     P.......2....H.
000030 8A 9B 31 06 F1 1B 6A 2E | 82 05 7A DE 27 3E 85 7D     ..1..j...z.'>.}
000040 E9 68 2B 22 2D EF 7B 76 | 1F 2F 41 C5 1A 43 EE E2     .h+"-.{v/A.C..
000050 02 77 52 DF 15 33 46 C5 | 6B 5C                       .wR..3F.k\
Как видно, пакеты от меня и от клиента отличаются.
Похоже, я снова делаю что-то неправильно...
так как впервые я заинтересовался протоколом ла2 (со вчерашнего дня) , то не знаю даже в чем проблема.
Помогите, кто может...

Добавлено через 9 минут
Вобщем скорее всего тут одно из двух:
1. Я неправильно криптую пакет.
2. Я неправильно вычисляю контрольную сумму.

Насчет контрольной суммы, делаю так, как прочитал на одном из форумов:


Цитата:
До этапа шифрования в исходящие пакеты добавляется чексумма:
Из данных поочерёдно отделяются 32-битные слова. Первое XOR'ится со вторым. Результат этой операции XOR'ится со следующим словом и так далее.

Последний раз редактировалось glukmaker, 12.10.2011 в 12:19. Причина: Добавлено сообщение
glukmaker вне форума   Ответить с цитированием