Сниффер

Тема в разделе "WASM.NETWORKS", создана пользователем John_T, 23 июн 2009.

  1. John_T

    John_T New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    26
    Есть прога WPE PRO. Помимо того что это прикольный сниффер, он умеет отсылать пакеты от лица другого приложения с возможеостью отредактировать сам пакет. Вот эта возможность меня сильно заинтересовала.
    Возможно ли подобное совершить на Delphi? Наставьте на путь истинный, желательно с примерами.
     
  2. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Кхмм... Кхмм...
    Значится так начнем сначала. Что из себя представляет TCP пакет. Грубо говоря это массив байтов. Люди так между собой договорились что по определеному смещению в этом масиве они кладут так называемую служебную информацию в которою входит и адрес отправителя и получателя (если не ошибаюсь то в самом начале подробнее о формате TCP пакета см гугл).
    Когда ты открываешь сокет и посылаешь по этому сокету какую либо информацию, формирование служебной инфорации берет на себя библиотека (через сколько именно библиотек это проходит в дельфи не знаю).
    Для того что бы самому сформировать всю служебную информацию (в том числе адрес отправителя и получателя) необходимо воспользоватся так называемыми сырыми сокетами. Подробно это было в статье Криса Касперски "Игра на сырых сокетах".
    Вот собсно и все. Извиняюсь за то что так длинно просто хочу помочь понять суть проблемы.
     
  3. John_T

    John_T New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    26
    Function StrToBuf(Str:String):String;
    var i:integer;
    str1: String;
    begin
    Result := '';
    Str1 := '';
    for I := 1 to Length(Str) do begin
    if Str = ' ' then begin
    Result := Result + Chr(StrToInt('$'+Str1));
    Str1:='';
    end
    Else
    Str1 := Str1 + Str;
    end;
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    var
    vwsadata : twsadata;
    vsocket : tsocket;
    vsockaddr : tsockaddr;
    buf : string;
    str,str2: string;
    I : Integer;
    begin
    flag:=1;
    if wsastartup($101,vwsadata)<>0 then halt(1);
    vsocket := socket(AF_INET, SOCK_RAW, IPPROTO_IP);
    if vsocket = invalid_socket then halt(1);
    fillchar(vsockaddr,sizeof(tsockaddr),0);
    vsockaddr.sin_family := af_inet;
    vsockaddr.sin_addr.s_addr := Inet_Addr('192.168.0.15');
    vsockaddr.sin_port:=HtoNS(3801);

    if connect(vsocket,vsockaddr,sizeof(tsockaddr)) = socket_error then halt(1);
    str2 := '3A 29 00 00 08 00 01 08 27 03 00 6A 21 04 00 ';
    Str := StrToBuf(str2);
    for I := 1 to Length(str) do
    Buffer := Str;
    send(vsocket,Buffer,length(Buffer),0);
    closesocket(vsocket);
    wsacleanup;
    end;

    вот тут я пытаюсь передать набор данных, с помощью сниффера узнаю что передаются совершенно другие данные.
    Почему?
     
  4. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Выложи лог снифера.
     
  5. John_T

    John_T New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    26
    Вот:
    88 0C AA 00 48 B6 48 00 FC F6 12 00 AA 93 44
     
  6. John_T

    John_T New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    26
    причем даже если я меняю данные, результат неизменен.
     
  7. John_T

    John_T New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    26
    Вот я баран!!!
    fillchar(vsockaddr,sizeof(tsockaddr),0); //Из за этого все :))