Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2015, 01:01   #1
ant.ares
 
Регистрация: 20.09.2015
Сообщений: 4
По умолчанию Наблюдение запусков программ

Перед мною поставлена задача создать программу ведущую наблюдение под win32 за запуском программ (и отслеживание их времени активности) на компьютере, с последующим составлением журнала активности. Хорошо бы еще чтобы наблюдать за сетевой активностью, хотя бы на уровне http. Понимаю, что без API тут делать нечего, но системная область для меня вообще в новинку, я больше писал программы по работе с базами данных. Если не трудно направьте хотя бы в нужном направлении (только не лесом..). Было бы замечательно чтото почитать конкретное с примерами, если кто предложит ссылки. Чтиво себе нагуглил, но оно больше "вокруг да около", а хочется с рассмотрением конкретных примеров. Заранее спасибо за помощь.
ant.ares вне форума Ответить с цитированием
Старый 20.09.2015, 09:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Начать можно отсюда:
http://delphiworld.narod.ru/base/get_run_processes.html
Вот пример поновее с PsAPI:
Код:
  function BuildListPS: Boolean;
   var
     PIDs: array [0..1024] of DWORD;
     Needed: DWORD;
     I: Integer;
     FileName: string;
   begin
     Result := EnumProcesses(@PIDs, SizeOf(PIDs), Needed);
     if Result then
     begin
       for I := 0 to (Needed div SizeOf(DWORD)) - 1 do
       begin
         case PIDs[I] of
           0:
             // PID 0 is always the "System Idle Process" but this name cannot be
            // retrieved from the system and has to be fabricated.
            FileName := RsSystemIdleProcess;
           2:
             // On NT 4 PID 2 is the "System Process" but this name cannot be
            // retrieved from the system and has to be fabricated.
            if IsWinNT4 then
               FileName := RsSystemProcess
             else
               FileName := ProcessFileName(PIDs[I]);
             8:
             // On Win2K PID 8 is the "System Process" but this name cannot be
            // retrieved from the system and has to be fabricated.
            if IsWin2k or IsWinXP then
               FileName := RsSystemProcess
             else
               FileName := ProcessFileName(PIDs[I]);
             else
               FileName := ProcessFileName(PIDs[I]);
         end;
         if FileName <> '' then
           List.AddObject(FileName, Pointer(PIDs[I]));
       end;
     end;
   end;
И к ней:
Код:
   function ProcessFileName(PID: DWORD): string;
   var
     Handle: THandle;
   begin
     Result := '';
     Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);
     if Handle <> 0 then
       try
         SetLength(Result, MAX_PATH);
         if FullPath then
         begin
           if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then
             SetLength(Result, StrLen(PChar(Result)))
           else
             Result := '';
         end
         else
         begin
           if GetModuleBaseNameA(Handle, 0, PChar(Result), MAX_PATH) > 0 then
             SetLength(Result, StrLen(PChar(Result)))
           else
             Result := '';
         end;
       finally
         CloseHandle(Handle);
       end;
   end;
Собираешь при запуске проги список в скажем TStringList, а потом например в таймере раз в... пять сек получаешь еще один список и сравниваешь с исходным.

Можно вроде еще получать список через WMI, но я не помню класс для получения списка процессов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.09.2015, 20:23   #3
ant.ares
 
Регистрация: 20.09.2015
Сообщений: 4
По умолчанию

спасибо, этого вполне достаточно; оно и хорошо, что не через WMI, этот функционал может быть заблокирован системной политикой безопасности; теперь осталось еще найти пример такого же контроля доступа к сайтам
ant.ares вне форума Ответить с цитированием
Старый 22.09.2015, 20:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
найти пример такого же контроля доступа к сайтам
А вот это как раз вообще без проблем: Любой Прокси сервер ставь, и через него раздавай интернет. User Gate к примеру. Будут тебе и логи и разграничение доступа к сайтам.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.09.2015, 21:01   #5
ant.ares
 
Регистрация: 20.09.2015
Сообщений: 4
По умолчанию

нет, все должно быть в одном теле клиента потому, что клиент должен работать в фоновом режиме на разных компьютерах, которые возможно даже не в одной локальной сети, ставить на каждый прокси не реально; а результат анализа будет отправляться по сети на сервер, скажем раз в неделю или раз в день, и формирование отчетности тоже должно быть автоматизировано; речь идет о удаленном контроле за рабочей загруженностью персонала; способ достижения данной цели конечно спорный даже для меня, но приказы начальства не обсуждаются)) я еще сам погуглю насчет контроля http, а может через Indi что нибудь напишу
ant.ares вне форума Ответить с цитированием
Старый 22.09.2015, 21:33   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ставить на каждый прокси не реально
Наоборот!
Ты все перепутал
Прокси ставится на один комп, а остальные в свойствах обозревателя или в свойствах браузеров настраиваются получать интернет через него. Как раз на клиента проксик ставить никак не надо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.09.2015, 23:37   #7
ant.ares
 
Регистрация: 20.09.2015
Сообщений: 4
По умолчанию

Цитата:
Прокси ставится на один комп, а остальные в свойствах обозревателя или в свойствах браузеров настраиваются получать интернет через него.
в этом случае весь трафик пойдет через внешний прокси-сервер и включение в трафик еще одного узла уменьшит скорость доступа; я понимаю, что это более простое решение, но лучше если анализ TCP-трафика будет локальным; не думаю, что это сложно сделать, поищу примеры реализации прокси в коде; и это при том, что цель то не в адресации трафика, в чем главная задача прокси, а парсить локальную активность входящего трафика, т.е. осуществлять перехват по TCP/IP, фильтровать порт как 80 или 8080 и определять адрес источника

еще раз убеждаюсь в том, статьи из "хакера" кладезь мудрости

Последний раз редактировалось Stilet; 23.09.2015 в 08:57.
ant.ares вне форума Ответить с цитированием
Старый 23.09.2015, 08:58   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
включение в трафик еще одного узла уменьшит скорость доступа
Омайнгот! Откуда такие сведения? Даже если и будут потери, то не значительные.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наблюдение за доменом exp_keym Помощь студентам 3 06.12.2013 15:37
NetDominator - удаленное управление и наблюдение maxim1234 Софт 0 02.11.2012 10:20
Наблюдение за процессом xil Общие вопросы .NET 3 08.07.2010 19:10
Наблюдение за буфером обмена в безоконном приложении Gerzs Общие вопросы Delphi 3 07.07.2010 20:00
Счётчик запусков Яр|/||< (^_^) Софт 4 15.08.2009 15:30