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
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 ??
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!
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..
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.. ;)
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...
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 !
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
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`;
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