За ссылки - спасибо.
Но все равно пока я ничего не добился...
Делал все так:
В модуле 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'ится со следующим словом и так далее.
|