+ Responder ao Tópico



  1. #1

    Padrão Socket - Cliente Rodar Script no Servidor

    Salve Linuxers.

    Mais uma vez aqui estou recorrendo aos colegas.

    Preciso arranjar um jeito de que uma aplicação Windows(Delphi) envie um "comando" para meu servidor Linux, para que este rode um script(bash).

    Pensei nesse caso em usar Socket, criando uma aplicação Server em Linux e o Cliente em Delphi. massssssssssssssss não faço idéia de como fazer isso no linux(no caso o server socket).

    Exemplo:

    O cliente(windows) vai conectar no servidor(linux) e vai enviar um "comando", "roda script" e o server vai receber essa string("roda script") e vai rodar o bendito ./script.sh


    Alguma luz? exemplo, tutor, how to, google link ou algo parecido?

    Vlws


  2. #2

    Padrão Re: Socket - Cliente Rodar Script no Servidor

    Sua idéia é muito interessante... ja tentou fazer com que o Delphi logue via telnet na maquina linux e execute os comandos ??

  3. #3
    ___ .IaRoSsI. ___
    Visitante

    Padrão Re: Socket - Cliente Rodar Script no Servidor

    A ideia de conectar por telnet eh legal , mais deixar a porta do telnet aberta nao eh nda seguro , o certo eh usar o socket mesmo.

    Vou passar pra vc o jeito q sei fazer , que eh em perl !

    Desculpe , eu fiz agora pra ti , nao sei nem se eh isso q vc quer mesmo ...



    Código :
    #!/usr/bin/perl
     
    use IO::Socket;
     
    $porta = 50; # aqui a porta que o seu linux vai escutar e seu delphi vai conectar
     
    $Server = IO::Socket::INET->new(LocalPort => $porta,
            Type   => SOCK_STREAM,
            Reuse   => 1,
            Listen  => 100
            ) or die "Impossível criar o socket : $! \n";
    if (fork){ exit;}
     
    $0 = "Executa Script"; # nome do processo , quando vc der um ps ax
     
    while( $Client = $Server->accept() ){
     
      # Cria o sub-processo
      if(fork){
        &transfer($Client);
        exit;
      }
        sleep(1);
    }
    sub transfer(){
        my $Client = shift;
     
        while(<$Client>){
            if($_ =~ /^roda script/) {
               # se o delphi ter um telnet na porta configurada acima e depois escrever
               #roda script
               print $Client "Executando...\n";
               system("sh /script.sh");
               print $Client "Completo...\n";
               shutdown($Client,2);
               return 1; # ou pode coloca exit aqui
             } else {
                print $Client "Comando nao existe\n";
             }
        }
    }

    E soh salvar com socket.pl , depois da um perl socket.pl

    da um telnet localhost 50 pra testar
    digita
    roda script e da enter q ele vai chamar seu script

    depois me diz se ficou blz!

  4. #4

    Padrão Re: Socket - Cliente Rodar Script no Servidor

    Salve Denis, Deu lhe pague!!!

    era isso mesmo que precisava.... valeu mesmo..

    Agora eu so preciso descobrir como o delhi vai dar um telnet no meu ip, hehehehe..

    Vlw... obrigadao mesmo..


  5. #5

    Padrão Re: Socket - Cliente Rodar Script no Servidor

    Citação Postado originalmente por cebolark
    Salve Denis, Deu lhe pague!!!

    era isso mesmo que precisava.... valeu mesmo..

    Agora eu so preciso descobrir como o delhi vai dar um telnet no meu ip, hehehehe..

    Vlw... obrigadao mesmo..

    aproveitando.... de uma procurada no google pelo programa Lazarus, voce vai achar interessante..

  6. #6

    Padrão Re: Socket - Cliente Rodar Script no Servidor

    Ola Denis Iarossi,

    testei seu script e usando delphi, fiz o script ser executado no servidor, a minha duvida eh se este script pode retornar alguma coisa, tipo uma String ou ate mesmo um arquivo texto ?

    vc tem alguma ideal a respeito ?

    Grato por qualquer dica...

  7. #7
    ___ .IaRoSsI. ___
    Visitante

    Padrão Re: Socket - Cliente Rodar Script no Servidor

    Caro vini ,

    Tomara que eu tenha entendido a sua pergunta , rs

    na parte do script qual:
    print $Client "Executando...\n";

    ele esta retornando p/ o seu cliente Delphi uma String !

    Caso vc queira retorna p/ p Delphi um texto basta :

    $resp = system("cat arquivo");
    print $Client $resp;

    espero ter entendido , qq coisa , soh falar mister !


  8. #8

    Padrão Re: Socket - Cliente Rodar Script no Servidor

    Ola Denis,

    depois da mensagem eu ate acabei descobrindo que o print tava dando o retorno, so nao sabia como fazer esse cat q vc fez, veja uq eu fiz.

    print $Client "Executando perl...\n";
    system("arp >>teste.txt");
    $valor = system("cat teste.txt");
    print $Client $valor;

    ta retonrnando "0"

    uq pode ser ?

    mais uma vez obrigado,

    Vinicius

  9. #9
    ___ .IaRoSsI. ___
    Visitante

    Padrão Re: Socket - Cliente Rodar Script no Servidor

    Iai grande vini ,

    O que vc fez esta perfeito ...

    Aqui esta o teste que fiz com sua alteracao

    [root@desenv root]# perl teste.pl
    [root@desenv root]# telnet localhost 50
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    roda script
    Executando perl...
    Address HWtype HWaddress Flags Mask Iface
    192.168.254.1 ether 00:08:54:26:A2:35 C eth0
    200.102.206.17 ether 00:E0:1E:3E:76:A3 C eth1



    nao esqueca que vc deve passa roda script p/ o socket

    teste que eu fiz foi , dar um telnet localhost 50

    depois digitei roda script

    Na parte do Sockets esta tudo Ok ,

    Alternativa:

    Você pode fazer só isso aqui naquele caso

    print $Client `arp`;

  10. #10

    Padrão Re: Socket - Cliente Rodar Script no Servidor

    Fala Denis,

    blza, funcionou 100%, a questão toda eh o tipo de aspas, eu tava usando aspas simples, ai ele interpretava como string, e retornava o nome arp, e usando a crase ele funcionou, valeu pela ajuda...

    Vinicius