#  > Desenvolvimento >  > Linguagens de Programação >  >  Telnet dentro de um script, tem como?

## dlabreu

Ola pessoal!


Me desculpem de solicitar ajuda denovo 'e que nesse caso nem sei por onde comecar.

Meu Chefe me pedio um script que tem que dar um telnet em um hardware de telefonia e resetar o mesmo

O hardware 'e facil de resetar so precisa escrever R e enter ! Pronto!

Mas deixa eu escrever aqui o que ele quer



O Script tem que 

Telnet (ip do Hardware)
Colocar Senha.

Resetar o Hardware R + Enter

Apos resetar , esperar por 2 minutos .


Pingar o Hardware e com o resultado do ping gerar um log

Mandar um email com o resultado do log.

Esse 'e o Script , o problema 'e que nao sei como vou fazer para usar o Telnet e fazer o meu Script esperar por 2 minutos , pigar e gerar um log.

Estou bem perdido nessa.

POR FAVOR ME AJUDEM!!!

Abraco


Daniel

----------


## marcelosantoro

Axo que tenho uma possivel solução pra vc a alguns meses desenvolvi algo parecido mas para se comunicar o com Mikrotik e graças a Deus esta funcionando perfeitamente... utilizei PHP para fazer esta comunicação ... vou te passar a bola aqui agora ...

vc vai precisar da Classe TELNET feita em PHP que é a seguinte:
http://walcan.icenet.com.br/TELNET/telnetmodule.php.inc

Com este Script vc eh capaz de fazer o seguinte

crie um outro php por exemplo - executa.php e dentro dele coloque
<?
include("telnetmodule.php.inc");

$username="LOGINTELNET"; //LOGIN PARA CONEXAO AO TELNET
$password="SENHATELNET"; //SENHA DE CONEXAO AO TELNET
$microtikserver="192.168.0.15"; //IP do HOST a Receber o Comando TELNET

$tn = new telnet("$microtikserver",23);
$tn->read_till("ogin: ");
$tn->write("$username\r\n");
$tn->read_till("word: ");
$tn->write("$password\r\n");
$tn->read_till(">");
$tn->write("R\r"); //LINHA DO SEU COMANDO --- JAH COLOQUEI o SEU COMANDO Aí DENTRO
$online=$tn->read_till("\n\n");
$tn->close();


?>

Cara eu axo que isso aqui jah funciona pelo menos para dar o RESET  :Smile: 
Agora eh soh vc dar um sleep de X segundos e tentar fazer um PING  :Smile: 

Espero ter Ajudado !!!

Abraços amigo

----------


## galahad

A outra possibilidade que você tem é de usar o expect para fazer a conexão com o telnet e enviar os comandos que você precisa pro teu hardware.

Eu uso o expect principalmente para gerenciar ativos CISCO.

----------


## dlabreu

Ola meus amigo!


Muito obrigado pelas dicas , gostei mesmo desse expect, porem nao entendi direito.
Tenho que ter ele instalado na minha maquina?

Achei isso na Net , porem ainda nao entendi o sentido da coisa , sera que tem como vc me dar uma explicao breve?

set timeout 20 #If it all goes pear shaped the script will timeout after 20 seconds.
set name [lindex $argv 0] #First argument is assigned to the variable name
set user [lindex $argv 1] #Second argument is assigned to the variable user
set password [lindex $argv 2] #Third argument is assigned to the variable password

spawn telnet $name #This spawns the telnet program and connects it to the variable name

expect "login:" #The script expects login
send "$user " #The script sends the user variable
expect "Password:" #The script expects Password
send "$password " #The script sends the password variable
interact #This hands control of the keyboard over two you (Nice expect feature!) 


Honestamente so preciso que o Script faca um telnet nesse hardware que nao tem nome de usuario so pede por senha, e depois dentro do Telnet preciso digitar R e enter.
Pronto , acabou meu script.

Please me ajudem


Grato


Daniel

----------


## galahad

```
set timeout 20 # o script vai interromper a execução em 20 segundos se algo der errado
set ip [lindex $argv 0] # o primeiro argumento da linha de comando vai ser associado a variável IP
set senha [lindex $argv 1] # o segundo argumento vai ser associado a variavel senha (senha do hardware)
 
spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip
 
expect "Password:" # O script espera pelo prompt "Password:", configure aqui exatamente 
                          # o prompt que aparece para você quando abre o telnet para o hardware
send "$senha" # O script envia o conteúdo da variável senha
send "R\n" # O script envia o comando R seguido de "Enter"
```

 
Tá aí o seu script. Você pode chamar ele de dentro de um script bash e fazer no bash as outras interações que você precisa, por exemplo, de esperar os 2 minutos e fazer o ping pro equipamento e gravar as informações do ping em um arquivo e enviar por e-mail.

----------


## dlabreu

Ola Amigo!


Muito Obrigado mesmo pela ajuda que vc tem me dado , vc ja me ajudou tb com outro script.

Porem sou novato mesmo com Shell e Script , tenho estudado , mas ainda para mim 'e um mundo novo , mas sei que com tempo chego la.

Bom me desculpe a minha falta de conhecimento , mas continuo nao entendendo o que devo fazer , coloquei essas informacoes no meu script que ficou assim :


set timeout 20 #O script vai interromper a execução em 20 segundos se algo der errado
set ip [lindex $192.168.20.111 0] #O primeiro argumento da linha de comando vai ser associado a variável IP
set senha [lindex [email protected] 1] #O segundo argumento vai ser associado a variavel senha (senha do hardware)

spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip

expect "Password:" #O script espera pelo prompt "Password:", configure aqui exatamente
#o prompt que aparece para você quando abre o telnet para o hardware
send "$senha" #O script envia o conteúdo da variável senha
send "R\n" #O script envia o comando R seguido de "Enter"


Porem quando rodo o script , recebo esses erros, segue abaixo :

[[email protected] scripts]# ./etmresetnew.sh 
./etmresetnew.sh: line 17: spawn: command not found
./etmresetnew.sh: line 19: expect: command not found
./etmresetnew.sh: line 21: send: command not found
./etmresetnew.sh: line 22: send: command not found


Gostaria de saber pq e me da um erro ed command not found?

Novamente , sou muito grato pela ajuda e me desculpe pela falta de conhecimeto!


Granto 



Daniel

----------


## galahad

o código que te passei é um código expect e não bash, você vai colocar ele em um arquivo chamado etmreset.exp:


```
#!/bin/env expect -f
set timeout 20 # o script vai interromper a execução em 20 segundos se algo der errado
set ip [lindex $argv 0] # o primeiro argumento da linha de comando vai ser associado a variável IP
set senha [lindex $argv 1] # o segundo argumento vai ser associado a variavel senha (senha do hardware)
 
spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip
 
expect "Password:" # O script espera pelo prompt "Password:", configure aqui exatamente 
                          # o prompt que aparece para você quando abre o telnet para o hardware
send "$senha" # O script envia o conteúdo da variável senha
send "R\n" # O script envia o comando R seguido de "Enter"
```

 
No seu script bash, você vai colocar o seguinte:



```
#!/bin/bash
 
./etmreset.exp 192.168.20.111 [email protected]
```

 
Tenta primeiro isso, depois incrementamos seu script.

----------


## dlabreu

Frederico

VALEU MESMO pelas ajudas!

Mais ainda nao entendo , fiz tudo que me pedio mas ainda encontro esses erros abaixo: 

[[email protected] scripts]# ./gsr.sh 
./etmreset.exp: line 11: spawn: command not found
couldn't read file "Password:": no such file or directory
./etmreset.exp: line 15: send: command not found
./etmreset.exp: line 16: send: command not found
[[email protected] scripts]# 

O que estou fazendo de errado?
nao tenho nem ideia!

Abraco


Daniel

----------


## MarcusMaciel

dlabreu

execute 


```
whereis expect
```

 achando o path do expect por exemplo /bin/expect ou /usr/bin/expect

adicione no topo do seu script

#!/usr/bin/expect -f

os comandos que deram erro so irao funcionar se estiverem executados pelos expect

----------


## dlabreu

Ola Meu amigo!

Fiz exatamente o que vc falou e os erros continuam .


vou colar aqui

[[email protected] scripts]# whereis expect
expect: /usr/bin/expect /usr/lib/expect5.43 /usr/share/man/man1/expect.1.gz
[[email protected] scripts]# 
[[email protected] scripts]# 
[[email protected] scripts]# ./gsr.sh 
./etmreset.exp: line 11: spawn: command not found
couldn't read file "Password:": no such file or directory
./etmreset.exp: line 15: send: command not found
./etmreset.exp: line 16: send: command not found


Abracos


Daniel

----------


## MarcusMaciel

dlabreu,

coloque todo conteudo do gsr.sh aqui para que a gente possa dar uma olhada

----------


## MarcusMaciel

dele e do ./etmreset.exp

----------


## dlabreu

ok Amigo


Ai vai

Esse 'e o gsr.sh

#!/bin/bash

./etmreset.exp 192.168.20.111 admin



----------------------------------------------------------------------

Aqui o etmreset.exp

#! /usr/lib/expect5.43 -f
set timeout 20 # o script vai interromper a execução em 20 segundos se algo der errado
set ip [lindex $argv 0] # o primeiro argumento da linha de comando vai ser associado a variável IP
set senha [lindex $argv 1] # o segundo argumento vai ser associado a variavel senha (senha do hardware)

spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip

expect "Password:" # O script espera pelo prompt "Password:", configure aqui exatamente
# o prompt que aparece para você quando abre o telnet para o hardware
send "$senha" # O script envia o conteúdo da variável senha
send "R\n" # O script envia o comando R seguido de "Enter"


-------------------------------------------------------------------------------------------------------------

Aqui o meu resultado do whereis expect

[[email protected] scripts]# whereis expect
expect: /usr/bin/expect /usr/lib/expect5.43 /usr/share/man/man1/expect.1.gz




Obrigado mesmo pela ajuda!

----------


## MarcusMaciel

dlabreu,

troque no topo do etmreset.exp 



```
#! /usr/lib/expect5.43 -f
```

 
por



```
#!/usr/bin/expect -f
```

 

isso deve resolver os seus problemas.

----------


## dlabreu

Ola amigo


Troquei o que vc me pedio, mas continuo com erro, segue abaixo.

[[email protected] scripts]# ./gsr.sh 
./etmreset.exp: line 11: spawn: command not found
couldn't read file "Password:": no such file or directory
./etmreset.exp: line 15: send: command not found
./etmreset.exp: line 16: send: command not found

O que pode estar acontecendo?


Abracos


daniel

----------


## MarcusMaciel

eu heim

troca por

#!/usr/bin/expect

e faz um teste denovo

----------


## dlabreu

Ola Amigo!


Meu erro continua .


[[email protected] scripts]# ./gsr.sh 
./etmreset.exp: line 12: spawn: command not found
couldn't read file "Password:": no such file or directory
./etmreset.exp: line 16: send: command not found
./etmreset.exp: line 17: send: command not found


Nao existe uma outra forma de fazer esse script? e nao tenho ideia nenhuma do que esta acontecendo.


??????????????

Grato


daniel

----------


## MarcusMaciel

cara poste novamente o codigo fonte dos 2 scripts para que eu possa analisar depois dessas mudancas eu tenho certeza que vc esta fazendo algo errado.

----------


## dlabreu

okok!


Ai vai os codigos!


gsr.sh

#!/bin/bash

./etmreset.exp 192.168.20.111 admin

------------------------------------------------------------------------------------------


etmreset.exp


#!/usr/bin/expect

set timeout 20 # o script vai interromper a execução em 20 segundos se algo der errado
set ip [lindex $argv 0] # o primeiro argumento da linha de comando vai ser associado a variável IP
set senha [lindex $argv 1] # o segundo argumento vai ser associado a variavel senha (senha do hardware)

spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip

expect "Password:" # O script espera pelo prompt "Password:", configure aqui exatamente
# o prompt que aparece para você quando abre o telnet para o hardware
send "$senha" # O script envia o conteúdo da variável senha
send "R\n" # O script envia o comando R seguido de "Enter"




Obrigado pela ajuda !


Abracos

----------


## MarcusMaciel

cara eu nao faco ideia do que pode estar errado meu script ta funcionando assim mesmo a minha ultima ideia é vc dar um 
chmod +x gsr.sh
chmod +x etmreset.exp

fora isso pra mim ta tudo certo

----------


## galahad

faca como o scorpion disse, de executar o chmod +x etmreset.exp e execute da seguinte forma:

./etmreset.exp 192.168.20.111 admin

----------


## galahad

Conseguiu fazer funcionar?

Continuam os erros?

----------


## dlabreu

Ainda nao consegui testar pq o uma pessoa aqui na empresa precisou do equipamento, creio que vou conseguir testar somente , semana que vem!


Porem ate la posso dizer Muito Obrigado por tudo mesmo!!!



Assim que testart aviso
.


Valeu pessoal

----------


## dlabreu

Pessoal estou aqui com o equipamento de volta.

Vou fazer os testes hoje anoite!


Se der certo aviso a voces!


Grato por tudo


Daniel Abreu

----------


## hibria

> Axo que tenho uma possivel solução pra vc a alguns meses desenvolvi algo parecido mas para se comunicar o com Mikrotik e graças a Deus esta funcionando perfeitamente... utilizei PHP para fazer esta comunicação ... vou te passar a bola aqui agora ...
> 
> vc vai precisar da Classe TELNET feita em PHP que é a seguinte:
> http://walcan.icenet.com.br/TELNET/telnetmodule.php.inc
> 
> Abraços amigo



Marcelo, será que você pode me enviar esta classe do telnet em PHP, pois parece que este link está fora do ar.
Dede já agradeço

Abraços

----------

