Oficina

Gerenciador Remoto

Dom

28

Mai

2006


09:01

  • Imprimir
(18 votos, média 5.00 de 5) 


1.0 O que é o Gerenciador Remoto?

O Gerenciador Remoto é um aplicativo cliente/servidor que permite a um usuário controlar uma máquina na sua rede, seja ela local ou remota. Mas como assim cliente/servidor? Bem, entendemos por servidor a parte do programa que deve ser executada na máquina que se deseja manipular a partir de outro computador. A outra parte da aplicação, o lado cliente, deve ser executado na máquina que irá manipular a que estiver com o lado servidor em execução. E qual o fundamento disto? Simples. Com um aplicativo deste nível, o usuário pode ter total controle em uma máquina como, por exemplo, desligar o monitor da máquina, executar programas, criar pastas e arquivos, desligar o computador, etc. Um programa deste nível é o NetBus, um programa razoavelmente antigo e muito utilizado por crackers para efetuar invasões em sistemas alheios. É claro que o nosso gerenciador remoto será muito mais simples que o famoso NetBus, mas vale lembrar que a construção é praticamente a mesma.

Como estamos criando este aplicativo com intuitos totalmente educacionais, o nosso humilde gerenciador remoto contará apenas com funções muito simples, apenas para se demonstrar a funcionalidade do projeto.

1.1 Como ele funciona?

O funcionamento do Gerenciador Remoto é muito simples. Por uma lado, o módulo servidor será ativado no computador que se deseja manipular. Uma vez ativado, o módulo servidor ficará escutando e esperando comandos em uma porta TCP. Quando um comando chegar por esta porta para o módulo servidor, ele o verificará e, dependendo do comando, o executará. Do outro lado, o módulo cliente apenas terá a função de se conectar com o lado servidor e enviar os comandos desejados para que o servidor os execute.

1.2 Um Gerenciador Remoto no Delphi

O desenvolvimento de um Gerenciador Remoto no Delphi é fácil, prático e muito interessante de se fazer. Digo interessante, pois quando você entender como é feito, não irá ter problema nenhum em adicionar inúmeras funcionalidades nele, assim como implementá-lo para outras versões do Windows, tornando assim o seu desenvolvimento muito legal pois é bastante motivador saber que é plenamente possível melhorá-lo e desenvolve-lo por conta própria.

No Gerenciador Remoto teremos dois trabalhos: o primeiro é codificar o módulo servidor, que é o responsável por nos permitir controlar o computador de uma máquina remota. O segundo trabalho é a codificação do módulo cliente, que manterá uma comunicação com o módulo servidor, assim como também enviar os comandos a serem executados.

Para a criação do módulo servidor utilizaremos um componente do Delphi chamado ServerSocket que fica localizado na paleta Internet. Este componente é responsável por permitir ao Delphi a criação de servidores para o protocolo TCP. No caso do módulo servidor, utilizaremos o componente ClientSocket, também localizado na paleta Internet. Este é o componente responsável por se conectar com o ServerSocket do módulo servidor.

1.3 As funções do servidor

Funções do Gerenciador
Abrir o Internet Explorer
Abrir a Proteção de Tela
Abrir o MSN Messenger
Encerrar o Servidor

Como já disse antes, a construção do Gerenciador Remoto é simples, mas isto depende da quantidade de funções que ele irá permitir ao usuário remoto executar. No caso do nosso programa, como tem efeito totalmente educacional e visa simplesmente mostrar a idéia de como ele é feito, iremos limitar o número de funções para as que seguem na tabela ao lado:

Com estas funções ao lado, você já irá poder ter uma ótima noção de como a criação do gerenciador funciona e poderá progredir na criaçãoo de um utilitário muito mais completo e grandioso.


1.4 Construindo o módulo Servidor e a sua codificação

Componente Propriedade Conteúdo
TButtonCaptionAtivar
TLabelCaptionStatus do Servidor
TLabelCaption?

Abra o Delphi e inicie um novo projeto. Salve o mesmo como serv.dpr e a sua unit como u_serv.pas. No formulário que abrir, altere a propriedade caption do Form1 para "Módulo Servidor". Depois, insira o componente ServerSocket, que fica localizado na paleta Internet. Insira também um Tbutton e dois Tlabel. Altere a propriedade destes itens para as que seguem na tabela:

Após estes passos, seu formulário deverá se apresentar desta forma:

Módulo Servidor
Módulo Servidor

Agora vamos adicionar a sua codificação. Dê um duplo clique no botão Ativar. Feito isto, digite o seguinte código responsável por todo o funcionamento:

ServerSocket1.port:=31300;
ServerSocket1.Active:=true;

Agora, selecione o componente ServerSocket e, no Object Inspector, selecione a sua propriedade OnListen, na paleta Events. Neste evento, insira o código:

Label2.caption:= 'Ativado!';

Feito isto, ainda selecionando o componente ServerSocket, vá no Object Inspector, selecione a propriedade OnClientRead e insira o seguinte código:

var
  texto: string;
begin
  label2.Caption:='Servidor em uso.';
  texto:=socket.ReceiveText;

  if texto='PROTECAO' then
  begin
    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);    
  end;

  if texto='NAVEGAR' then
  begin
    WinExec('c:\Arquivos de Programas\Internet Explorer\iexplore.exe', SW_SHOW);
  end;

  if texto='MSN' then
  begin
    WinExec('c:\Arquivos de Programas\MSN Messenger\msnmsgr.exe', SW_SHOW);
  end;

  if texto='QUIT' then
  begin
    ServerSocket1.Active:=false;
    form1.close;
  end;

end;

Pronto pessoal! Vocês devem estar se perguntando: Ué! Só isso? Sim! O nosso módulo servidor já está pronto para ser usado. Mais pra frente neste capítulo, nós iremos analisar o código deste módulo para que todos entendam sua programação. Vamos agora construir o módulo Cliente.


1.5 Construindo o módulo Cliente e a sua codificação

Quantidade Componente
4TLabel
1TEdit
1TComboBox
2TButton

O módulo Cliente consiste em um programa que envia para o módulo Servidor os comandos que o usuário deseja executar na máquina remota. Sem dúvida, é mais fácil desenvolver o módulo cliente do que o servidor, mesmo tendo o módulo cliente um pouco mais de componentes. E isto é o que veremos agora.

Inicie um novo projeto no Delphi. Salve a unit como u_cliente.pas e o projeto como cliente.dpr. No formulário que se iniciar, altere a propriedade Caption para "Módulo Cliente". Insira um componente ClienteSocket, localizado na paleta Internet. Insira também os seguintes componentes listados na tabela ao lado:

Agora, vamos alterar algumas propriedades destes componentes adicionados ao nosso formulário.

Componente Propriedade Conteúdo
Label1CaptionIP do Servidor:
Label2CaptionComando a Enviar:
Label3CaptionStatus:
Label4Caption?
Edit1Text
Button1CaptionCONECTAR
Button2CaptionENVIAR!

Vamos agora alterar duas propriedades do componente ComboBox1, separadamente, para que você não se perca no decorrer da construção. Altere conforme a tabela da direita:

Componente Propriedade Conteúdo
ComboBox1TextEscolha o Comando!!!
ComboBox1Items PROTECAO
NAVEGAR
MSN
QUIT

Após estas alterações, arrume os componentes no formulário para que fique parecido com o que segue abaixo:



Módulo Cliente
Módulo Cliente

Beleza! Agora vamos inserir o código no nosso programa Cliente. Dê um duplo clique no nosso botão CONECTAR e insira o código abaixo:

ClientSocket1.Host:=edit1.text;
ClientSocket1.Port:=31300;
ClientSocket1.Active:=True;

Agora selecione o componente ClientSocket e no Object Inspector, na paleta Events, escolha a ação OnConnect e insira o código que segue:

Label4.Caption:= ' Conectado ao Servidor ';

Continuando, dê agora um duplo clique no botão ENVIAR! e insira o código:

ClientSocket1.Socket.SendText(ComboBox1.Text);
Label4.Caption:='Comando Enviado.';

Prontinho. Já está terminado! Claro que não é uma super aplicação comercial que envolveu uma equipe de 13 programadores e um investimento de R$260.000,00 de uma multinacional, mas é o nosso simples programa Cliente que serve totalmente para o aprendizado sobre a construção do nosso Gerenciador Remoto. E por falar em aprender, chegou a tão esperada hora de entender o código.


2.0 Entendendo o Código

2.1 Servidor

Bom, como o primeiro módulo que criamos foi o Servidor, nada mais justo do que começar por ele, não é? Então vamos lá. O primeiro ponto que codificamos no nosso módulo Servidor foi o botão Ativar.

O código para este botão é:

ServerSocket1.port:=31300;
ServerSocket1.Active:=true;

No código acima definimos o valor da porta a ser usada pelo ServerSocket para 31300 e, logo depois, mudamos o estado do ServerSocket para Ativo, como mostra a linha ServerSocket1.Active:=true;

O segundo ponto que codificamos no nosso Servidor foi a propriedade OnListen do ServerSocket. O código responsável é:

Label2.caption:= 'Ativado!';

O código acima inserido na propriedade OnListen do nosso ServerSocket faz com que, quando um usuário se conecte com a porta 31300 ativa do nosso módulo Servidor, a Label2 tenha sua propriedade Caption alterada para Ativado.

Agora veremos a parte mais interessante do nosso código, que é a parte referente ao evento OnClientRead do nosso módulo Servidor. O código é:

var
  texto: string;
begin
  label2.Caption:='Servidor em uso.';
  texto:=socket.ReceiveText;

  if texto='PROTECAO' then
  begin
    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);    
  end;

  if texto='NAVEGAR' then
  begin
    WinExec('c:\Arquivos de Programas\Internet Explorer\iexplore.exe', SW_SHOW);
  end;

  if texto='MSN' then
  begin
    WinExec('c:\Arquivos de Programas\MSN Messenger\msnmsgr.exe', SW_SHOW);
  end;

  if texto='QUIT' then
  begin
    ServerSocket1.Active:=false;
    form1.close;
  end;

end;

Na parte

var
  texto: string;

iniciamos a variável texto que irá conter o comando repassado pelo módulo Cliente a ser executado pelo módulo Servidor. Em seguida temos:

  label2.Caption:='Servidor em uso.';
  texto:=socket.ReceiveText;

onde em label2.caption:='Servidor em uso'; definimos para a label2 a sua propriedade caption como 'Servidor em uso'. Depois repassamos o texto recebido do modulo Cliente em Socket.ReceiveText para a nossa variável texto.

A seguir, temos o bloco de código responsável pela execução dos comandos:

  if texto='PROTECAO' then
  begin
    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);    
  end;

  if texto='NAVEGAR' then
  begin
    WinExec('c:\Arquivos de Programas\Internet Explorer\iexplore.exe', SW_SHOW);
  end;

  if texto='MSN' then
  begin
    WinExec('c:\Arquivos de Programas\MSN Messenger\msnmsgr.exe', SW_SHOW);
  end;

  if texto='QUIT' then
  begin
    ServerSocket1.Active:=false;
    form1.close;
  end;

No trecho

  if texto='PROTECAO' then
  begin
    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);    
  end;

fazemos na linha que contém a comparação com o que foi repassado pelo módulo Cliente para a variável texto com a palavra em maiúscula PROTECAO. Caso a comparação seja positiva, ou seja, o que foi repassado para a variável texto é igual à palavra PROTECAO, então podemos executar, caso seja utilizada pelo sistema em questão a proteção de tela na máquina onde está sendo executado o módulo Servidor. O código responsável pela execução da proteção de tela é:

    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

Após este bloco de código acima, temos o que segue:

  if texto='NAVEGAR' then
  begin
    WinExec('c:\Arquivos de Programas\Internet Explorer\iexplore.exe', SW_SHOW);
  end;

Aqui fazemos novamente a comparação da variável texto com uma palavra, que desta vez é NAVEGAR. Caso o que se tenha na variável texto seja igual à palavra comparada, então é executado o Internet Explorer na máquina do módulo Servidor. O código responsável por essa execução é:

    WinExec('c:\Arquivos de Programas\Internet Explorer\iexplore.exe', SW_SHOW);

Por padrão, o caminho c:\Arquivos de Programas\Internet Explorer\ é o que contém o executável do Internet Explorer, mas isto poderá mudar e cabe a você na hora de programar o seu módulo Servidor checar se é realmente este o caminho na máquina em que o servidor será executado.

Prosseguindo com o código temos:

  if texto='MSN' then
  begin
    WinExec('c:\Arquivos de Programas\MSN Messenger\msnmsgr.exe', SW_SHOW);
  end;

Mais uma vez comparamos o conteúdo da variável texto com outra palavra e, caso seja positivo, executamos uma ação. No caso, esta palavra é MSN e se for esta a palavra repassada, executaremos o MSN, o programinha de bate-papo mais famoso do mundo da nossa amiga Microsoft. O código para execução do MSN é:

    WinExec('c:\Arquivos de Programas\MSN Messenger\msnmsgr.exe', SW_SHOW);

Mais uma vez vale lembrar que é possível que o caminho correto do MSN não seja este em todas as máquinas, cabendo novamente a você verificar o caminho correto na hora de construir o seu módulo Servidor.

Por fim, no código do nosso módulo Servidor temos o seguinte:

  if texto='QUIT' then
  begin
    ServerSocket1.Active:=false;
    form1.close;
  end;

Novamente comparamos a variável texto com outra palavra, que no caso é QUIT. Se a comparação for positiva, executaremos uma ação, que no caso é a finalização da execução do módulo servidor cujo código responsável por isto é:

    ServerSocket1.Active:=false;

Em outras palavras, desativamos o nosso ServerSocket. E para finalizar, fechamos o Módulo Servidor de uma vez com o comando:

    form1.close;

E pronto! Agora você já sabe por que o módulo Servidor é capaz de funcionar. Vamos agora para o módulo Cliente!


2.2 Cliente

É fato que a codificação do nosso módulo Cliente é bem mais tranqüila do que a do módulo Servidor. Iremos começar a entender a codificação do módulo Cliente a partir da nosso botão CONECTAR.

O código do nosso botão CONECTAR é:

ClientSocket1.Host:=edit1.text;
ClientSocket1.Port:=31300;
ClientSocket1.Active:=True;

onde em

ClientSocket1.Host:=edit1.text;

definimos para a propriedade Host do nosso ClientSocket o endereço repassado pelo usuário no Edit1.text.

Em seguida temos:

ClientSocket1.Port:=31300;

Aqui repassamos para a propriedade Port do nosso ClientSocket o valor 31300, que será a porta pela qual nos conectaremos com o módulo Servidor.

E finalizando temos

ClientSocket1.Active:=True;

ou seja, o código responsável por ativar a conexão do módulo Cliente com o módulo Servidor. O código acima faz com que o nosso ClientSocket tente se conectar com o endereço definido na propriedade Host utilizando a porta definida na propriedade Port do ClientSocket.

Em seguida temos o código referente ao evento OnConnect do nosso ClientSocket. O código é:

Label4.Caption:= ' Conectado ao Servidor ';

O código consiste em alterar a propriedade Caption do label4 para ' Conectado ao Servidor '. Em outras palavras, caso o módulo Cliente se conecte com o Servidor, será mostrada na interface do módulo Cliente a mensagem Conectado ao Servidor para que o usuário saiba do sucesso da conexão.

E por fim, o código mais importante do nosso módulo Cliente, que é o do botão ENVIAR!. Este é o código responsável por enviar o comando desejado para ser executado pelo módulo Servidor.

O código do botão ENVIAR! é:

ClientSocket1.Socket.SendText(ComboBox1.Text);
Label4.Caption:='Comando Enviado.';

Nele temos a linha:

ClientSocket1.Socket.SendText(ComboBox1.Text);

Nesta linha enviamos o texto escolhido no nosso ComboBox1 para o Host definido nas propriedades do nosso ClientSocket. No caso em questão, o Host será o do módulo Servidor, pois é para ele que queremos enviar o comando. A parte do comando .SendText(ComboBox1.Text); é a designada e responsável pelo envio do texto para o módulo Servidor, ou para qualquer outro lugar, dependendo do que se queira fazer, mas isto não vem ao caso agora né!

E finalizando, temos:

Label4.Caption:='Comando Enviado.';

Esta linha simplesmente altera a propriedade Caption do Label4 para 'Comando Enviado', alertando o usuário e mostrando que o texto já foi enviado. Com isto, finalizamos o nosso projeto.

Concluindo

Pronto, pessoal, este é o código do nosso humilde Gerenciador Remoto totalmente funcional em relação ao que ele se propõe a fazer, o que no caso é simplesmente explicar como funciona a execução e manipulação remota. Agora cabe a você incrementá-lo e adicionar funções que você ache interessantes, melhorar a sua interface e tudo mais que você quiser! No nosso livro temos um capítulo com uma série de funções bem legais e interessantes que você poderá utilizar na implementação do seu Gerenciador Remoto. Vale a pena tentar!

казино онлайн azartplayкак выбрать сковородкуникас ресторан александр лобановскийvsemsmartооо полигон киев отзывылобановский александр