На главную Наши проекты:
Журнал   ·   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_
  
> Tor Control на Delphi
    Доброденько.

    Есть ли рабочие примеры, управления TOR-ом ?
      А какого рода управление нужно?
        Меня интересует смена нима для текущего подключения главным образом.
        Ну а в идеале конечно было бы неплохо иметь возможность полноценно общаться с тором и получать от него всю инфу.


        В этих ваших интернетах есть один пример, в разных вариантах, один такой вариант ниже.
        Но он не работает, тк после tcp.SendCmd('AUTHENTICATE',-1); результат приходит 515 Чё делать то?

        Тор завожу так:
        Цитата

        "C:\Users\Userok\Desktop\BTor Browser\Browser\TorBrowser\Tor\tor.exe" --defaults-torrc "C:\Users\Userok\Desktop\BTor Browser\Browser\TorBrowser\Data\Tor\torrc-defaults" -f "C:\Users\Userok\Desktop\BTor Browser\Browser\TorBrowser\Data\Tor\torrc" DataDirectory "C:\Users\Userok\Desktop\BTor Browser\Browser\TorBrowser\Data\Tor" GeoIPFile "C:\Users\Userok\Desktop\BTor Browser\Browser\TorBrowser\Data\Tor\geoip" GeoIPv6File "C:\Users\Userok\Desktop\BTor Browser\Browser\TorBrowser\Data\Tor\geoip6"


        Не рабочий пример из интернетов:
        ExpandedWrap disabled
          procedure TorChangeIP(AHost: string; APort: integer);
            const ErrMsg = 'Tor ChangeIP Error: ';
            var tcp: TIdTCPClient;
          begin
            tcp:=TIdTCPClient.Create(nil);
            try
              tcp.Host:=AHost;
              tcp.Port:=APort;
              tcp.Connect;
              try
                tcp.SendCmd('AUTHENTICATE',-1);
                if tcp.LastCmdResult.TextCode<>'250' then
                  raise Exception.Create(ErrMsg+tcp.LastCmdResult.TextCode);
                tcp.SendCmd('SIGNAL NEWNYM',-1);
                if tcp.LastCmdResult.TextCode <>'250' then
                  raise Exception.Create(ErrMsg+tcp.LastCmdResult.TextCode);
              finally
                tcp.Disconnect;
              end;
            finally
              tcp.Free;
            end;
          end;
          Так может в настройках тора надо аутентиф-ся. Можно поснифать, как общается с ним Видалия
            Хорошо бы, только вот инструмента хорошего для этого нету, был когда-то appsniff хорошая штуковина, но на x64 не работает, а аналогов я не знаю, пробовал некоторые сниферы, но без результата. :(
              Я в основном SmSniff юзаю, но можно и монстра WireShark попробовать
                SmSniff - это снифер трафика сетевой карты, а нужен снифер между двумя локальными приложениями, как раз appsniff это умел делать, внедряясь в чужой процесс.
                WireShark - давно как-то использовал, чё-то он мне своим недружественным фейсом вобще не понравился.
                  Так все равно через сокеты, если не ловит обмен через локалхост - укажи в настройках внешний адрес вместо 127.0.0.1 и будет ловить
                    Всё, со всем разобрался всё работает. :)
                      Цитата Jiro @
                      Всё, со всем разобрался всё работает. :)

                      Извиняюсь за некропост, но тем не менее не могли бы вы подсказать как именно решился вопрос ?

                      У меня выдает вот такой выхлоп.

                      ==============
                      13:56:08 Ошибка авторизации на порте управления: Authentication failed: Password did not match HashedControlPassword value from configuration. Maybe you tried a plain text password? If so, the standard requires that you put it in double quotes.
                      ==============

                      Скрытый текст


                      ExpandedWrap disabled
                         

                      // Обработка статуса TOR
                      if (Exec <> 0) and (ExePID <> 0) then
                      begin
                      LogFileAdd('TOR_EXEC:' + IntToStr(Exec) + ' PID:' + IntToStr(ExePID) + ' SocksPort:' + IntToStr(Port) + ' ControlPort:' + IntToStr(ControlPort));
                      LogFileAdd('Ожидание готовности TOR: 5000');
                      Delay(5000); // Защитное время ожидания запуска

                      // Подключение к порту управления
                      begin
                      AClient:= TIdTCPClient.Create(nil);
                      try
                      AClient.Host := '127.0.0.1';
                      AClient.Port := ControlPort;
                      AClient.ConnectTimeout := 10000; // 10.0 sec
                      AClient.ReadTimeout := 10000; // 10.0 sec
                      AClient.Connect;
                      try
                      AClient.SendCmd ('AUTHENTICATE','16:E60A178AF69054FB6039E7FA8B207A89E20B9AE648BA765540187A558A\r\n');
                      LogFileAdd('TOR Вернул код ошибки: ' + AClient.LastCmdResult.Code);
                      if AClient.LastCmdResult.Code = '250' then
                      begin
                      LogFileAdd('Авторизация на порте управления прошла успешно 250');
                      Result := True;
                      end;
                      except
                      on E: Exception do
                      begin
                      LogFileAdd('Ошибка авторизации на порте управления: ' + E.Message);
                      exit
                      end;
                      end;
                      finally
                      AClient.Free;
                      end;
                      end;

                      ExpandedWrap disabled
                         




                      Запускаю так:

                      ExpandedWrap disabled
                         

                      (paramstr(0), '--socksport ' + IntToStr(Port) + ' --controlport ' + IntToStr(ControlPort) + ' --hashedcontrolpassword 16:E60A178AF69054FB6039E7FA8B207A89E20B9AE648BA765540187A558A', @ABuffer[0]);
                      ExpandedWrap disabled
                         


                      Пробовал и просто пароль и в кавычках и 16-ричный хоть ты тресни не проходит авторизация и все.

                      Хотел посмотреть как авторизуется Vidalia, но так и не смог найти подходящего инструмента, через Microsoft LoopBack Adapter не получается, там нет нужнго трафика.

                      Может кто натолкнет на правильные мысли ? :thanks:
                      Сообщение отредактировано: MasterBoy -
                        MasterBoy

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



                        Добавлено
                        ну а далее можешь слать вские там newnymb и тд.
                        Сообщение отредактировано: Jiro -
                          Я вас понял, но это не решение вопроса, у меня получилось, для поддержания форума я поделюсь ответом.

                          Случайно натолкнулся в недрах интернета что на контрольный порт тора можно цепляться телнетом, введя ту последовательность которая реализована в коде моей программы я быстро получил отлуп аналогичный выхлопу исключения, потом пробовал различные варианты пока не получил код 250, и о да страйк ! AClient.SendCmd ('AUTHENTICATE "mypassword"'); запрос должен выполняться без запятой ! и пароль обязательно в кавычках (о чем и написано в выхлопе исключения) тема решена, профит.

                          ======================
                          15:44:42 TOR_EXEC:356 PID:4176 SocksPort:32207 ControlPort:32208
                          15:44:42 Ожидание готовности TOR: 5000
                          15:44:47 TOR Вернул код ошибки: 250
                          15:44:47 Авторизация на порте управления прошла успешно 250
                          ======================

                          Есть еще вопросы, уважаемый Jiro не могли бы вы подсказать как мне определить (какими командами через порт контрола) готовность тора к отправке трафика ?
                          Сообщение отредактировано: MasterBoy -
                            Цитата MasterBoy @
                            какими командами через порт контрола) готовность тора к отправке трафика ?


                            Если не ошибаюсь то
                            ExpandedWrap disabled
                              IdTCPClient1.SendCmd('GETINFO status/bootstrap-phase', -1);
                            и далее тор возвращает фазу готовности в процентиках.
                            но возможно перед этим нужно ещё пульнуть команду TAKEOWNERSHIP.

                            Вообще лучше поснифить, там всё точно покажется, чем снифить вопрос хороший ... я чем-то снифил, увы не помню чем.
                            вроде использовал SockSniff от Nirsoft.

                            ps:
                            кстати если запускать тор без HashedControlPassword то всё равно нужно слать AUTHENTICATE но уже с параметром -1:
                            ExpandedWrap disabled
                                IdTCPClient1.SendCmd('AUTHENTICATE',-1);
                              Цитата Jiro @
                              Если не ошибаюсь то
                              ExpandedWrap disabled
                                IdTCPClient1.SendCmd('GETINFO status/bootstrap-phase', -1);
                              и далее тор возвращает фазу готовности в процентиках.
                              но возможно перед этим нужно ещё пульнуть команду TAKEOWNERSHIP.

                              Огромное спасибо, отправив GETINFO status/bootstrap-phase я получил 250-status/bootstrap-phase=NOTICE BOOTSTRAP PROGRESS=100 TAG=done SUMMARY="Done" - то что нужно ! В самое яблочко. TAKEOWNERSHIP отправлять не требуется. Еще раз и спасибо добрый человек. :thanks:
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0511 ]   [ 17 queries used ]   [ Generated: 16.04.24, 20:50 GMT ]