Stack Overflow em Português Asked by Edu Mendonça on September 27, 2021
Pensando na nescidade de se verificar se uma certa aplicação está sendo executada no servidor, me veio a mente se tem como fazer essa verificação utilizando Delphi e se positivo como seria?
No caso, pela aplicação do lado Cliente verificar se uma outra aplicação está aberta no servidor.
No momento eu só consigo fazer essa verificação na maquina local com o código abaixo:
var
Path: string;
Hwnd: THandle;
begin
// FindWindow vai procurar pela classe TApplication
Hwnd := FindWindow('TApplication', 'AutoPub');
// se o Handle e' 0 significa que nao encontrou
if (Hwnd = 0) and (DataModuleGeral.tbParametrosCODESCRITORIO.AsInteger <> 0) then
begin
Path := ExtractFilePath(Application.ExeName);
ShellExecute(Handle,'open',PChar('AutoPub.exe'),'',PChar(Path),SW_SHOW);
end;
end;
Praticamente tudo tem um jeito huahuahua
Existe um protocolo chamado SNMP(Simple Network Management Protocol) utilizamos esse protocolo para monitorar máquinas remotas, com ele é possível pegar informações como:
Ou seja esse protocolo é muito utilizado para gerencia de servidores e computadores, imagina um parque com 100 servidores rodando, vc acha que entramos nos 100 servidores e ficamos olhando se o HD tá lotando, se o consumo da placa de rede tá no talo, etc, etc, ??? claro que não né, criamos sistemas automáticos de alertas, um servidor client conecta via SNMP em todos os servers e fica coletando os dados a cada X
minutos, se algo estiver errado, esse servidor cliente gera alertas, manda email, liga, bate tambor, etc rsrs
Então o que vc pode fazer é habilitar o snmp server no windows/linux na qual vc quer coletar o nome do programa/processo, veja aqui como isso pode ser feito no windows, feito isso seu programa terá que se conectar ao pc que vc deseja via algum client SNMP, no delphi eu sei que existe o Indy-SNMP
.
Ex:
program snmptest;
{$APPTYPE Console}
uses
SysUtils, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, IdSNMP;
var
Snmp: TIdSNMP;
Idx: Integer;
begin
Snmp := TIdSNMP.Create(nil);
try
Snmp.Query.Host := 'Hostname or IP'; //IP do computador que habilitou o snmp server
Snmp.Query.Community := 'public'; // comunidade configurada no snmp server
Snmp.Query.PDUType := PDUGetRequest;
Snmp.Query.MIBAdd('1.3.6.1.2.1.1.1.0',''); //OID que retorna o que deseja
if Snmp.SendQuery then
begin
WriteLn('Replies: ' + IntToStr(Snmp.Reply.ValueCount));
for Idx := 0 to Snmp.Reply.ValueCount - 1 do
WriteLn(Snmp.Reply.Value[0]);
end;
finally
Snmp.Free;
end;
end.
Esse parâmetro Snmp.Query.MIBAdd
é o OID que vc seta para colher a informação que vc quer, cada número retorna algo diferente, ou seja vai ter um OID que retorna informações de memória, OID que retorna espaço de disco, OID que retorna os programas rodando, etc, etc, etc esse OID ai do código vc terá q testar e verificar o q vai ter como retorno, dá uma pesquisada e teste o OID hrSWRunName
, acho que ele retorna todos os processos rodando no windows...
Além disso se não quiser usar o Indy-SNMP
instale o client executável chamado snmpwalk
no computador que vai fazer a consulta no server SNMP, eu acabei de testar o OID hrSWRunName
, em um PC qualquer da rede instalei o snmpwalk e usei o comando para ele mostrar o que tem rodando no servidor windows (claro esse servidor tem o serviço snmp server habilitado e configurado)...
segue comando e resultado:
snmpwalk -v 2c -c public 192.168.32.23 hrSWRunName
tive como retorno:
HOST-RESOURCES-MIB::hrSWRunName.1 = STRING: "System Idle Process"
HOST-RESOURCES-MIB::hrSWRunName.4 = STRING: "System"
HOST-RESOURCES-MIB::hrSWRunName.288 = STRING: "smss.exe"
HOST-RESOURCES-MIB::hrSWRunName.336 = STRING: "csrss.exe"
HOST-RESOURCES-MIB::hrSWRunName.360 = STRING: "winlogon.exe"
HOST-RESOURCES-MIB::hrSWRunName.408 = STRING: "services.exe"
HOST-RESOURCES-MIB::hrSWRunName.420 = STRING: "lsass.exe"
HOST-RESOURCES-MIB::hrSWRunName.576 = STRING: "svchost.exe"
HOST-RESOURCES-MIB::hrSWRunName.660 = STRING: "svchost.exe"
HOST-RESOURCES-MIB::hrSWRunName.732 = STRING: "svchost.exe"
HOST-RESOURCES-MIB::hrSWRunName.768 = STRING: "svchost.exe"
HOST-RESOURCES-MIB::hrSWRunName.784 = STRING: "svchost.exe"
HOST-RESOURCES-MIB::hrSWRunName.916 = STRING: "spoolsv.exe"
HOST-RESOURCES-MIB::hrSWRunName.940 = STRING: "msdtc.exe"
HOST-RESOURCES-MIB::hrSWRunName.1152 = STRING: "svchost.exe"
HOST-RESOURCES-MIB::hrSWRunName.1176 = STRING: "ibguard.exe"
HOST-RESOURCES-MIB::hrSWRunName.1196 = STRING: "sqlservr.exe"
HOST-RESOURCES-MIB::hrSWRunName.1252 = STRING: "svchost.exe"
HOST-RESOURCES-MIB::hrSWRunName.1304 = STRING: "snmp.exe"
HOST-RESOURCES-MIB::hrSWRunName.1608 = STRING: "WUSyncSvc.exe"
HOST-RESOURCES-MIB::hrSWRunName.1636 = STRING: "mssearch.exe"
HOST-RESOURCES-MIB::hrSWRunName.1840 = STRING: "sqlagent.exe"
HOST-RESOURCES-MIB::hrSWRunName.1876 = STRING: "svchost.exe"
HOST-RESOURCES-MIB::hrSWRunName.1896 = STRING: "ibserver.exe"
HOST-RESOURCES-MIB::hrSWRunName.2024 = STRING: "alg.exe"
HOST-RESOURCES-MIB::hrSWRunName.2172 = STRING: "wmiprvse.exe"
HOST-RESOURCES-MIB::hrSWRunName.2232 = STRING: "cmd.exe"
HOST-RESOURCES-MIB::hrSWRunName.2432 = STRING: "notepad.exe"
HOST-RESOURCES-MIB::hrSWRunName.2712 = STRING: "explorer.exe"
HOST-RESOURCES-MIB::hrSWRunName.2780 = STRING: "ctfmon.exe"
HOST-RESOURCES-MIB::hrSWRunName.2792 = STRING: "sqlmangr.exe"
HOST-RESOURCES-MIB::hrSWRunName.2864 = STRING: "svchost.exe"
HOST-RESOURCES-MIB::hrSWRunName.3980 = STRING: "isqlw.exe"
isso significa que outra opção então é vc fazer o seu delphi executar um snmpwalk e pegar o retorno do comando, tratar o retorno e comparar se o .exe que deseja está no retorno (na vdd o Indy-SNMP é um client SNMP, praticamente é um snmpwalk né, bem melhor usar o indy-snmp do que ter que ficar instalando client externo)...
Como vc pode perceber, isso pode ser perigoso, um hacker na sua rede pode descobrir qual community vc configurou nos servidores e tentar varrer sua rede procurando por portas SNMP abertas, com isso ele pode conseguir informações de serviços e programas rodando na rede, e depois tentar explorar, então quando for configurar o serviço SNMP server não esqueça de permitir que somente IP's de confiança consigam fazer consultas de somente leitura ....
Correct answer by ederwander on September 27, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP