На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> WebSocked Server , Приём данных
    Доброго времени суток.

    Столкнулся с некой трудностью.... Подскажите знающие люди.
    Делаю так : Парсим вот эту строчку
    ExpandedWrap disabled
      81FE0140C01AA420977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E977FC673AF79CF45B43AD64FA371D70EEE348A0E67


    Вот таким методом

    ExpandedWrap disabled
      procedure TForm1.Button3Click(Sender: TObject);
      var buff:string;
          RWebSocked: Packed record
           PayloadData : TMemoryStream;
           MaskKey: Array [0..3] of byte;
           OpCode:byte;
           PayloadLen:Integer;
           Fin,Mask:Boolean;
          end;
          x:TByteArray;
          xLen,i,j,k,t:Integer;
      begin i:=1; buff:=Edit8.Text; xLen:=0; FillChar(RWebSocked,SizeOf(RWebSocked),$0);
       while not (i >= length(Edit8.Text)) do begin
        x[xLen]:=StrToInt('0x'+buff[i]+buff[i+1]);
        Inc(i,2);Inc(xLen);
       end; Memo3.Lines.Add('Packed len : '+IntToStr(xLen));
       try RWebSocked.PayloadData:=TMemoryStream.Create;
           RWebSocked.PayloadData.Clear;
       except on E:Exception do begin Memo3.Lines.Add('ERROR:'+E.ClassName+' --> '+E.Message)
              end;
       end; i:=0;
       repeat
        with RWebSocked do begin
         Fin:=boolean(x[i] and $80);
         OpCode:=x[i] and $0F;
         Inc(i);
         Mask:=Boolean(x[i] and $80);
         PayloadLen:=x[i] and $7F;
         Inc(i);
         if PayloadLen = 126 then inc(i)  {32-bit}
         else if PayloadLen = 127 then inc(i,2); {64-bit}
         MaskKey[0]:=x[i]; inc(i);
         MaskKey[1]:=x[i]; inc(i);
         MaskKey[2]:=x[i]; inc(i);
         MaskKey[3]:=x[i]; inc(i);
         j:=PayloadLen+i-1; k:=0;
         for i:=i to j do begin
          t:=x[i] xor MaskKey[k mod 4];
          PayloadData.Write(t,1);
          Inc(k);
         end;
        end;
       until i>=xLen;
       RWebSocked.PayloadData.Position:=0;
       ShowMessage('Complite Packed len : '+IntToStr(xLen));
       Memo3.Lines.LoadFromStream(RWebSocked.PayloadData);
      end;


    На выходе получаетм вот это :
    ExpandedWrap disabled
      `Web3ock t r cksN...NWeb3ock t r cksN...NWeb3ock t r cksN...NWeb3ock t r cksN...NWeb3ock t r cksN...NWeb3ock t r cksN...NWeb3o
       K KZ \K#E 6 C

    Когда должно быть вот это :
    ExpandedWrap disabled
      WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....WebSocket rocks.....


    Где и как я мог промахнутся или я не правильно понял описание протокола?
      Цитата konvikkor @
      или я не правильно понял описание протокола?

      Если ты еще сообщишь, какого протокола, будет вообще замечательно
          И так, не внимательно прочёл документацию. Увы пришлось день потратить чтобы всё перечитать и пересмотреть. Ошибка заключалась в длине пакета. Из за этого происходило смещение маски.

          Кому интересно то вот парсер пакетов WebSocked

          ExpandedWrap disabled
            procedure TForm1.Button3Click(Sender: TObject);
            var buff:string;
                RWebSocked: Packed record
                 PayloadData : TMemoryStream;
                 MaskKey: Array [0..3] of byte;
                 OpCode:byte;
                 PayloadLen:Int64;
                 Fin,Mask:Boolean;
                end;
                x:TByteArray;
                xLen,i,j,k,t:Integer;
            begin i:=1; buff:=Edit8.Text; xLen:=0; FillChar(RWebSocked,SizeOf(RWebSocked),$0);
             while not (i >= length(Edit8.Text)) do begin
              x[xLen]:=StrToInt('0x'+buff[i]+buff[i+1]);
              Inc(i,2);Inc(xLen);
             end; Memo3.Lines.Add('Packed len : '+IntToStr(xLen));
             try RWebSocked.PayloadData:=TMemoryStream.Create;
                 RWebSocked.PayloadData.Clear;
             except on E:Exception do begin Memo3.Lines.Add('ERROR:'+E.ClassName+' --> '+E.Message)
                    end;
             end; i:=0;
             repeat
              with RWebSocked do begin
               Fin:=boolean(x[i] and $80);
               OpCode:=x[i] and $0F; Inc(i);
               Mask:=Boolean(x[i] and $80);
               PayloadLen:=x[i] and $7F; Inc(i);
               if PayloadLen = 126 then begin
                PayloadLen:=StrToInt('0x'+IntToHex(x[i],2)+IntToHex(x[i+1],2));
                inc(i,2);  {32-bit}
               end;
               if PayloadLen = 127 then begin
                PayloadLen:=StrToInt('0x'+IntToHex(x[i],2)
                                         +IntToHex(x[i+1],2)
                                         +IntToHex(x[i+2],2)
                                         +IntToHex(x[i+3],2)
                                         +IntToHex(x[i+4],2)
                                         +IntToHex(x[i+5],2)
                                         +IntToHex(x[i+6],2)
                                         +IntToHex(x[i+7],2));
                inc(i,8); {64-bit}
               end;
               MaskKey[0]:=x[i]; inc(i); MaskKey[1]:=x[i]; inc(i); MaskKey[2]:=x[i]; inc(i); MaskKey[3]:=x[i]; inc(i);
               j:=PayloadLen+i-1; k:=0;
               for i:=i to j do begin t:=ord(x[i]) xor MaskKey[k mod 4];
                PayloadData.Write(t,1); Inc(k);
               end;
              end;
             until i>=xLen;
             RWebSocked.PayloadData.Position:=0;
             ShowMessage('Complite Packed len : '+IntToStr(xLen));
             Memo3.Lines.LoadFromStream(RWebSocked.PayloadData);
            end;
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0.0842 ]   [ 16 queries used ]   [ Generated: 20.09.26, 18:02 GMT ]