Конференция "Сети" » посылка сообщения в локальной сети [D6, Win2k]
 
  • lead-in (21.05.08 11:45) [0]
    Добрый день. Есть такой вопрос - как узнать запущена ли какая-либо служба (net send, например) на удалённом пк, нужно вот отправить сообщение, а кроме net send`а ничево не знаю подходящего, вообще сообщение нужно отправить анонимно, net send показывает сетевое имя отправителя, а можно это сделать не раскрывая своего ip?
  • Сергей М. © (21.05.08 11:59) [1]

    > нужно отправить анонимно


    От кого шифруемся ?)
  • lead-in (21.05.08 12:04) [2]
    Да никакой шифровки, поздравление с праздником просто, и чтоб не знали от кого)))
  • Сергей М. © (21.05.08 12:41) [3]

    > как узнать запущена ли какая-либо служба (net send, например)
    > на удалённом пк


    Для этого нужно иметь административные права на целевом компе
  • lead-in (21.05.08 12:59) [4]
    а их (прав) естественно нет, то есть никакими службами здесь не обойтись?
  • Сергей М. © (21.05.08 13:00) [5]
    Почтовой).. Если адресат по случаю праздника будет регулярно проверять почту)
  • lead-in (21.05.08 14:56) [6]
    Да в принципе))) но согласитель если выползает сообщение прям "на рабочий стол" - это намного неожиданней и соот-но приятней)))
  • Сергей М. © (21.05.08 15:00) [7]
    Не соглашусь)
    Кому как)
  • alexm_hs_ (23.05.08 21:14) [8]
    Никаких прав администратора не надо на чужом компе. Дяля получения списка служб и их состояния. если код нужен - скажите
  • DVM © (23.05.08 21:16) [9]

    > это намного неожиданней и соот-но приятней)))

    Доставку цветов на дом лучше закажи. Там анонимно тоже можно.
  • lead-in (16.06.08 12:09) [10]

    > alexm_hs_


    да конечно! привидите, если не трудно... время ещё есть
  • multiflex (16.06.08 17:44) [11]
    Никакого смысла даже если и прочитаеш "список состояний", то уж запустить нужную службу без привилегий тебе точно не удастся. лучше засади на тот комп резидента, пускай висит себе %)
  • alexm_hs_ (16.06.08 22:45) [12]
    определить статус службы:


    function TfSysInfo.ServiceStatus(hostaddr, ServiceName: string): cardinal;
    var hSCManager: SC_HANDLE;
     hService: SC_HANDLE;
     lpServiceStatus: _SERVICE_STATUS;
    begin
     hSCManager := 0;
     hService := 0;
     try
       hSCManager := OpenSCManager(PChar(hostaddr), nil, SC_MANAGER_ALL_ACCESS);
       if hscManager <> 0 then begin
         hService := OpenService(hSCManager, PChar(ServiceName), SERVICE_QUERY_STATUS);
         QueryServiceStatus(hService, lpServiceStatus);
         result := lpServiceStatus.dwCurrentState;
       end else result := 0;
     finally
       if hService <> 0 then CloseServiceHandle(hService);
       if hscManager <> 0 then CloseServiceHandle(hscManager);
     end;
    end;




    Расшифровка кодов есть в MSDN.
    вот к примеру, как у меня сделано:


     StatusText: array[SERVICE_STOPPED..SERVICE_PAUSED] of string =
     ('Остановлена', 'Ожидание запуска', 'Ожидание останова', 'Запущена',
       'Ожидание продолжения', 'Ожидание приостанова', 'Приостановлена');



    вот как запустить/остановить службу


    function TfSysInfo.StartStopService(pcname, ServName: string; startstop: integer): integer; //start - 1, stop - 0; 2 - pause; 3 - continue;
    var
     hscManager, hService: LongWord;
     sStatus: TServiceStatus;
     lpServiceArgVectors: PChar;
    begin
     result := 0;
     hService := 0;
     hscManager := OpenSCManager(PChar(pcname), nil, SC_MANAGER_ALL_ACCESS);
     try
       if hscManager <> 0
         then
         case startstop of
           0: begin
               hService := OpenService(hscManager, PChar(ServName), SERVICE_STOP);
               ControlService(hService, SERVICE_CONTROL_STOP, sStatus);
               result := 0;
             end;
           1: begin
               lpServiceArgVectors := nil;
               hService := OpenService(hscManager, PChar(ServName), SERVICE_ALL_ACCESS);
               if hService <> 0 then StartService(hService, 0, PChar(lpServiceArgVectors));
               result := 0;
             end;
           2: begin
               hService := OpenService(hscManager, PChar(ServName), SERVICE_PAUSE_CONTINUE {SERVICE_ALL_ACCESS});
               ControlService(hService, SERVICE_CONTROL_PAUSE, sStatus);
               result := 0;
             end;
           3: begin
               hService := OpenService(hscManager, PChar(ServName), SERVICE_PAUSE_CONTINUE {SERVICE_ALL_ACCESS});
               ControlService(hService, SERVICE_CONTROL_CONTINUE, sStatus);
               result := 0;
             end;
         end
       else begin
         result := GetLastError
       end;
     finally
       if hService <> 0 then CloseServiceHandle(hService);
       if hscManager <> 0 then CloseServiceHandle(hscManager);
     end;
    end;




    однако, если не имеете привилегий администратора на удаленном компьютере, с запуском/остановом ничего не выйдет. надо будет устанавливать подключение к IPC с логином и паролем пользователя, обладающим этими привилегиями. Удачи
  • alexm_hs_ (16.06.08 22:49) [13]
    да! и не забудьте подключить к проекту модуль WinSvc :)
  • Rouse_ © (17.06.08 11:02) [14]

    > alexm_hs_   (23.05.08 21:14) [8]
    >
    > Никаких прав администратора не надо на чужом компе

    Точно уверен?
  • alexm_hs_ (17.06.08 19:23) [15]
    Ах, да! Извиняюсь! Днем сегодня сам уже подумал.

    конечно же вот здесь другой флаг (в первой функции)


     hSCManager := OpenSCManager(PChar(hostaddr), nil, SC_MANAGER_CONNECT);

  • lead-in (18.06.08 13:36) [16]

    > alexm_hs_


    спасибо! буду пробовать)...
 
Конференция "Сети" » посылка сообщения в локальной сети [D6, Win2k]
Есть новые Нет новых   [134432   +19][b:0][p:0.003]