Ruby serial and telnet scripts/programs


#1

Ciao a tutti,

E’ ormai un mese che cerco di utilizzare ROR per testare pabx e router
via serial port oppure telnet.
Prima di tutto non mi e’ chiaro se devo usare Freeride, fxri oppure
Scite.
Secondo ho seguito vari tutorial di base e ho imparato a fare qualche
semplice programmino, non sono sicuro di aver installato tutto il
necessario, non mi sembra un linguaggio immediato e visuale.

Tornando al mio problema, sto cercando uno script per collegarmi ad un
router via v.24 o telnet. Settarlo abilitando ADSL e Wireless e poi
testarlo con un semplice ping test.

Vi ringrazio e spero in una vostra pronta risposta,
Giovanni


#2

Giovanni wrote:

Ciao a tutti,

E’ ormai un mese che cerco di utilizzare ROR per testare pabx e router
via serial port oppure telnet.

Premetto che sto cominciando a pensare in ruby solo da poco :slight_smile:
ma per come la vedo io (e per come ho visto fare in qualche altro
software
a cui ho dato un’occhiata ma di cui non ricordo il nome :-)) con Rails
dovresti
realizzare esclusivamente la parte web della tua applicazione e
comunicare
con un altro piccolo demone ruby che esporti le funzionalita’ necessarie
a colloquiare con il router mediante dRb.

L’applicazione dRb potrebbe colloquiare con il router mediante la
libreria
Net::Telnet che trovi di serie con ruby :slight_smile:

un test che ho fatto io sul mio router lo puoi trovare qui:
http://www.salug.it/~ripley/posts/20060527-net_telnet.html

non e’ un granche’ ma rende l’idea :slight_smile:
per il resto su www.ruby-doc.org e www.rubymanual.org
trovi l’API doc.

Prima di tutto non mi e’ chiaro se devo usare Freeride, fxri oppure
Scite.

Quello che preferisci… io uso emacs :stuck_out_tongue_winking_eye:

Secondo ho seguito vari tutorial di base e ho imparato a fare qualche
semplice programmino, non sono sicuro di aver installato tutto il
necessario, non mi sembra un linguaggio immediato e visuale.

Molto dipende dal tuo background e le tue abitudini precedenti.

Tieni conto che Rails e’ un framework di sviluppo web agile per cui
tutto si traduce in codice (e cioe’ in ruby) come il modello agile
prevede.

Quindi la sua immediatezza non deriva tanto dalla sua ‘visualita’’
quanto dalla capacita’ di sintesi (dry) che il framework (e il
linguaggio)
ti permettono di mettere in campo.

Tornando al mio problema, sto cercando uno script per collegarmi ad un
router via v.24 o telnet. Settarlo abilitando ADSL e Wireless e poi
testarlo con un semplice ping test.

Come ho scritto prima lo script probabilmente sarebbe meglio tenerlo
semplice
e svincolato da rails (ruby puro per intenderci), parole chiave:

  • Net::Telnet
  • dRb

Vi ringrazio e spero in una vostra pronta risposta,
Giovanni

facci sapere come procede :wink:
rpl


#3

E’ ormai un mese che cerco di utilizzare ROR per testare pabx e router
via serial port oppure telnet.

Rails e Ruby sono degli ottimi strumenti, ma in quel settore la, molte aziende (cisco, ecc) usano Tcl per fare il loro testing, ed e
abbastanza adatto a questo scopo… Volendo, potresti scrivere i veri
test in Tcl, e poi creare un’interfaccia carina con Rails.


David N. Welton

Linux, Open Source Consulting


#4

ciao,

On 6/6/06, Ripley removed_email_address@domain.invalid wrote:

Come ho scritto prima lo script probabilmente sarebbe meglio tenerlo
semplice
e svincolato da rails (ruby puro per intenderci), parole chiave:

  • Net::Telnet
  • dRb

+1
fra l’altro utilizzando backgroundrb (ora disponibile come plugin) e’
MOLTO
semplice integrare dei processi ruby eseguiti vi dRb con una interfaccia
Rails.

Vedi: http://brainspl.at/articles/2006/05/25/backgroundrb-new-release

bye
Luca


#5

Ripley wrote:

con Rails
dovresti
realizzare esclusivamente la parte web della tua applicazione e
comunicare
con un altro piccolo demone ruby che esporti le funzionalita’ necessarie
a colloquiare con il router mediante dRb.

Come accedo a rails, sembrerebbe che fino ad ora ho utilizzato solo
Ruby.

L’applicazione dRb potrebbe colloquiare con il router mediante la
libreria
Net::Telnet che trovi di serie con ruby :slight_smile:

un test che ho fatto io sul mio router lo puoi trovare qui:
http://www.salug.it/~ripley/posts/20060527-net_telnet.html

non e’ un granche’ ma rende l’idea :slight_smile:

Grazie, questo esempio mi ha chiarito un po le idee ed sono riuscito ad
accedere via telnet al mio router. Ora il problema e’ che non effettua
il login.

#! ruby/bin/ruby

require ‘net/telnet’

sigma = Net::Telnet::new(“Host” => “192.168.1.1”,
“Timeout” => 10,
“Prompt” => /[$%#>] \z/n)
sigma.login(“engineer”, “engineer”) { |c| print c }

sigma.close

LAKE Communications
Login:>exit

Prima di tutto non mi e’ chiaro se devo usare Freeride, fxri oppure
Scite.

Quello che preferisci… io uso emacs :stuck_out_tongue_winking_eye:

Continuo ad utilizzare Freeride e mi sento costretto ad imparare un
nuovo linguaggio di programmazione

Grazie mille


#6

+1 per TCL
Come David io sono per utilizzare lo strumento migliore per ogni lavoro.
Partiamo dal tuo problema, un semplice script che si collega in
seriale o (meglio) Telnet ad un router per configurare dei parametri
ed effettuare dei ping di test.

TCL+Expect è esattamente quanto serve per questi lavori e lo trovi già
preinstallato su qualsiasi distribuizione seria di linux (ed anche in
Mac OS X).
Personalmente utilizzo uno script da due soldi per configurare il mio
router (da 1 soldo) con il mio ibook (da qualche parte i soldi dovevo
pure spenderli :-D).

segue (parte) doRouterSetup.tcl —>
#! /usr/bin/expect –
set timeout -1
spawn telnet 192.168.1.1
expect_before {
“not_connected” exit
“host idle” exit
“ogin incorrect” exit
}

expect "ogin: "
send “root\r”

expect "ssword: "
send “supersecretpwd\r”

expect "# "
send “cd /proc/sys\r”

e via dicendo fino al finale

expect "# "
send “exit\r”
interact

<<<----

Una cosa proprio banale banale, ma per aprire una sessione telnet e
mandare una serie di comandi serve veramente proprio con tcl+expect.

Ciao
Pietro

2006/6/7, Giovanni removed_email_address@domain.invalid:


#7

E’ ormai un mese che cerco di utilizzare ROR per testare pabx e router
via serial port oppure telnet.

Rails e Ruby sono degli ottimi strumenti, ma in quel settore la, molte aziende (cisco, ecc) usano Tcl per fare il loro testing, ed e
abbastanza adatto a questo scopo… Volendo, potresti scrivere i veri
test in Tcl, e poi creare un’interfaccia carina con Rails.

Visto che David ti consiglia Tcl io mi sento di consigliarti Perl,
poi dipende dai gusti di ognuno… :slight_smile: cmq googlando ho trovato questi
due link:

http://www.perlfect.com/articles/telnet.shtml
http://search.cpan.org/~cook/Device-SerialPort-1.000002/SerialPort.pm

Ciao
Tiziano


#8

Pietro M. wrote:

pure spenderli :-D).

Pietro

a colloquiare con il router mediante dRb.

sigma = Net::Telnet::new(“Host” => “192.168.1.1”,
“Timeout” => 10,
“Prompt” => /[$%#>] \z/n)
sigma.login(“engineer”, “engineer”) { |c| print c }

sigma.close

LAKE Communications
Login:>exit
Nei sorgenti di Net::Telnet leggo:

File net/telnet.rb, line 706

def login(options, password = nil) # :yield: recvdata
  login_prompt = /[Ll]ogin[: ]*\z/n
  password_prompt = /Password[: ]*\z/n
  if options.kind_of?(Hash)
    username = options["Name"]
    password = options["Password"]
    login_prompt = options["LoginPrompt"] if options["LoginPrompt"]
    password_prompt = options["PasswordPrompt"] if 

options[“PasswordPrompt”]
else
username = options
end

A occhio e croce (non ho provato) il problema potrebbe essere dovuto al
fatto che il prompt
dell’apparato che vuoi controllare contiene un ‘>’ dopo ‘ogin:’

quindi in teoria facendo qualcosa del tipo:

sigma.login({ “Name” => “engineer”, “Password” => “engineer”,
“LoginPrompt” => /[Ll]ogin:>/n) { |c| print c }

e magari PassWordPrompt se e’ il caso, dovresti risolvere :slight_smile:

Sarebbe carino avere un dsl ruby sullo stile di expect, ne ho trovato
uno su rubyforge ma non
mi ha soddisfatto tanto :frowning:

bye,
rpl


#9

Sono riuscito a colloquiare con il router
con questo script, che poi era quello di partenza

sigma = Net::Telnet::new(“Host” => “192.168.1.1”,
“Timeout” => 10,
“Prompt” => /[$%#>] \z/n)
sigma.login(“engineer”, “engineer”) { |c| print c }
sigma.cmd(“ip ping 192.168.1.1”) { |c| print c }
sigma.close

ora cio che vorrei fare caricare un nuovo firmware over uno vecchio 100
volte.
e verificare la versione corrente

Dovrei fare un ciclo for, ma qual’e’ il comando per fare un upload del
file.

In secondo luogo, secondo voi e’ possibile creara una sorta di record
and playback della web console application del mio router. Mi spiego se
volessi registrare le modifiche apportare al router via web, resettare
il sistema, riprodurle e comparare i due script.

Grazie per il vostro aiuto!!
Giovanni

Ripley wrote:

Pietro M. wrote:

pure spenderli :-D).

Pietro

a colloquiare con il router mediante dRb.

sigma = Net::Telnet::new(“Host” => “192.168.1.1”,
“Timeout” => 10,
“Prompt” => /[$%#>] \z/n)
sigma.login(“engineer”, “engineer”) { |c| print c }

sigma.close

LAKE Communications
Login:>exit
Nei sorgenti di Net::Telnet leggo:

File net/telnet.rb, line 706

def login(options, password = nil) # :yield: recvdata
  login_prompt = /[Ll]ogin[: ]*\z/n
  password_prompt = /Password[: ]*\z/n
  if options.kind_of?(Hash)
    username = options["Name"]
    password = options["Password"]
    login_prompt = options["LoginPrompt"] if options["LoginPrompt"]
    password_prompt = options["PasswordPrompt"] if 

options[“PasswordPrompt”]
else
username = options
end

A occhio e croce (non ho provato) il problema potrebbe essere dovuto al
fatto che il prompt
dell’apparato che vuoi controllare contiene un ‘>’ dopo ‘ogin:’

quindi in teoria facendo qualcosa del tipo:

sigma.login({ “Name” => “engineer”, “Password” => “engineer”,
“LoginPrompt” => /[Ll]ogin:>/n) { |c| print c }

e magari PassWordPrompt se e’ il caso, dovresti risolvere :slight_smile:

Sarebbe carino avere un dsl ruby sullo stile di expect, ne ho trovato
uno su rubyforge ma non
mi ha soddisfatto tanto :frowning:

bye,
rpl


#10

Devi usare il comando che usa il tuo router per uplodare il firmware
non c’e’ un comando specifico usando la net/telnet.


#11

tele wrote:

Devi usare il comando che usa il tuo router per uplodare il firmware
non c’e’ un comando specifico usando la net/telnet.

ok! Purtroppo non c’e’ un comando nel mio router per uplodare… ma
sulla web console si. Possibile?!?!

Ora il mio problema e’ con “waitfor”
voglio fare un “system restart” pero dopo aver ricevuto risposta ad un
“system config save”.

Input
<<

sigma.cmd(“system config save”){|c| print c}
sigma.waitfor(‘Code version is 169’){|c| print c}
sigma.cmd(“system restart”){|c| print c}
sigma.waitfor(‘Starting POTS’){|c| print c}
sigma.close

Ricevo
<<
c:/ruby/lib/ruby/1.8/net/telnet.rb:554 in ‘readpartial’:Invalid argument
(Errno::EINVAL)
c:/ruby/lib/ruby/1.8/net/telnet.rb:554 in ‘waitfor’
c:/ruby/lib/ruby/1.8/net/telnet.rb:680 in ‘cmd’

Che suggerite?

Grazie mille


#12

tele wrote:

matcha il prompt, quando ritorna al prompt vuol dire che ha finito di
fare il comando.

ad es:
@t_session.puts commands[0]
@t_session.waitfor(/.*>/) {|str| print str }

usa le regexp

ciao

Ho provato con:

sigma.waitfor(“Starting POTS” => match, “timeout” => 20){|c| print c}

c:/ruby/lib/ruby/1.8/net/telnet.rb:551 in ‘waitfor’


#13

Il problema esattamente e’ che quando effettua il restart, lo script non
aspetta il riavvio del router e ricevo errori:
554 in readpartial
554 in waitfor
678 in cmd

.... sigma.cmd("system restart"){|c| print c} sigma.waitfor("Prompt" => 'Starting POTS', "Timeout" => 400000){|c| print c} sigma.close

Giovanni wrote:

tele wrote:

matcha il prompt, quando ritorna al prompt vuol dire che ha finito di
fare il comando.

ad es:
@t_session.puts commands[0]
@t_session.waitfor(/.*>/) {|str| print str }

usa le regexp

ciao

Ho provato con:

sigma.waitfor(“Starting POTS” => match, “timeout” => 20){|c| print c}

c:/ruby/lib/ruby/1.8/net/telnet.rb:551 in ‘waitfor’


#14

Giovanni wrote:

Il problema esattamente e’ che quando effettua il restart, lo script non
aspetta il riavvio del router e ricevo errori:
554 in readpartial
554 in waitfor
678 in cmd

.... sigma.cmd("system restart"){|c| print c} sigma.waitfor("Prompt" => 'Starting POTS', "Timeout" => 400000){|c| print c} sigma.close

ALTRA QUESTIONE:

Posso accedere in qualche modo alla wireless card del mio laptop
connettermi
digitando username e password e verificare la connessione. Non posso
utilizzare telnet perche’ se non sono connesso non ho un IP address,
cosa suggerite?

Giovanni wrote:

tele wrote:

matcha il prompt, quando ritorna al prompt vuol dire che ha finito di
fare il comando.

ad es:
@t_session.puts commands[0]
@t_session.waitfor(/.*>/) {|str| print str }

usa le regexp

ciao

Ho provato con:

sigma.waitfor(“Starting POTS” => match, “timeout” => 20){|c| print c}

c:/ruby/lib/ruby/1.8/net/telnet.rb:551 in ‘waitfor’


#15

matcha il prompt, quando ritorna al prompt vuol dire che ha finito di
fare il comando.

ad es:
@t_session.puts commands[0]
@t_session.waitfor(/.*>/) {|str| print str }

usa le regexp

ciao


#16

spam anche qui?
bene…

----- Original Message -----
From: “Calvin” removed_email_address@domain.invalid
To: removed_email_address@domain.invalid
Sent: Wednesday, February 07, 2007 11:14 AM
Subject: [ruby-it] Stephon

<a

2005-09-10.html


Posted via http://www.ruby-forum.com/.



#17

919b5bdfa2b82f933ffa9c5b3ff5b6ce

2005-07-13.html
http://tangtu.manotiifrast.info/2005-08-02.html
2005-09-04.html


2005-09-01.html

http://victorfiglin.qupitaratersadno.info/2005-09-03.html
2005-08-25.html


2005-07-17.html

http://apachephotos.pratereoutdra.info/2005-09-16.html 2005-07-06.html


2005-09-16.html

http://britanicindia.imikkladanno.info/2005-08-02.html
2005-09-23.html


2005-07-15.html

http://datadak.perekatinetuzaba.info/2005-08-25.html
2005-07-11.html


2005-07-18.html

http://victorfiglin.qupitaratersadno.info/2005-07-26.html
2005-10-05.html


2005-09-10.html

http://thediscountvitaminstore.lopatajovtara.info/2005-08-04.html
2005-10-01.html


2005-10-04.html

http://massergycommunications.wertzaobtara.info/2005-08-09.html 2005-09-24.html

62391812410bcc1759701cfaa7e33dba


#18

Di una certa qualità poi… (NOT)
stb wrote:

 spam anche qui?
 bene...
 ----- Original Message ----- From: "Calvin" [1]<removed_email_address@domain.invalid>
 To: [2]<removed_email_address@domain.invalid>
 Sent: Wednesday, February 07, 2007 11:14 AM
 Subject: [ruby-it] Stephon

 919b5bdfa2b82f933ffa9c5b3ff5b6ce
 <a href=[3]"http://1-flight.manotiifrast.info/2005-07-13.html">
 2005-07-13.html </a>
 [4]http://tangtu.manotiifrast.info/2005-08-02.html <a
 href=[5]"http://marinaatmillcreek.trudnodostupna.info/2005-09-04.ht
 ml">
 2005-09-04.html </a>
 <a href=[6]"http://engineerpaul.zhabartufa.info/2005-09-01.html">
 2005-09-01.html </a>
 [7]http://victorfiglin.qupitaratersadno.info/2005-09-03.html <a
 href=[8]"http://communityireland.lopatajovtara.info/2005-08-25.html
 ">
 2005-08-25.html </a>
 <a
 href=[9]"http://domains-names-for-sale.uzxocantailim.info/2005-07-1
 7.html">
 2005-07-17.html </a>
 [10]http://apachephotos.pratereoutdra.info/2005-09-16.html <a
 href=[11]"http://gkstar.manotiifrast.info/2005-07-06.html">
 2005-07-06.html
 </a>
 <a href=[12]"http://ilawaid.imikkladanno.info/2005-09-16.html">
 2005-09-16.html </a>
 [13]http://britanicindia.imikkladanno.info/2005-08-02.html <a
 href=[14]"http://noprop81.perekatinetuzaba.info/2005-09-23.html">
 2005-09-23.html </a>
 <a
 href=[15]"http://groehldistributors.zhabartufa.info/2005-07-15.html
 ">
 2005-07-15.html </a>
 [16]http://datadak.perekatinetuzaba.info/2005-08-25.html <a
 href=[17]"http://tjenpenger-no.uzxocantailim.info/2005-07-11.html">
 2005-07-11.html </a>
 <a
 href=[18]"http://hauterive-saintjames.zhabartufa.info/2005-07-18.ht
 ml">
 2005-07-18.html </a>
 [19]http://victorfiglin.qupitaratersadno.info/2005-07-26.html <a
 href=[20]"http://calcuttacoffee.qupitaratersadno.info/2005-10-05.ht
 ml">
 2005-10-05.html </a>
 <a href=[21]"http://kcplan.trudnodostupna.info/2005-09-10.html">
 2005-09-10.html </a>
 [22]http://thediscountvitaminstore.lopatajovtara.info/2005-08-04.ht
 ml <a
 href=[23]"http://waltons.uzxocantailim.info/2005-10-01.html">
 2005-10-01.html </a>
 <a
 href=[24]"http://domains-names-for-sale.uzxocantailim.info/2005-10-
 04.html">
 2005-10-04.html </a>
 [25]http://massergycommunications.wertzaobtara.info/2005-08-09.html
 <a
 href=[26]"http://phpaid.manotiifrast.info/2005-09-24.html">
 2005-09-24.html
 </a>
 62391812410bcc1759701cfaa7e33dba
 --
 Posted via [27]http://www.ruby-forum.com/.

 -------------------------------------------------------------------
 -------------
 _______________________________________________
 Ml mailing list
 [28]removed_email_address@domain.invalid
 [29]http://lists.ruby-it.org/mailman/listinfo/ml
_______________________________________________________________________

Ml mailing list
[30]removed_email_address@domain.invalid
[31]http://lists.ruby-it.org/mailman/listinfo/ml


“The really rich people figure out how to dodge taxes anyway.” - George
W. Bush
, explaining why high taxes on the rich are a failed strategy,
Annandale, Va.,
Aug. 9, 2004

References

  1. mailto:removed_email_address@domain.invalid
  2. mailto:removed_email_address@domain.invalid
  3. http://1-flight.manotiifrast.info/2005-07-13.html
  4. http://tangtu.manotiifrast.info/2005-08-02.html
  5. http://marinaatmillcreek.trudnodostupna.info/2005-09-04.html
  6. http://engineerpaul.zhabartufa.info/2005-09-01.html
  7. http://victorfiglin.qupitaratersadno.info/2005-09-03.html
  8. http://communityireland.lopatajovtara.info/2005-08-25.html
  9. http://domains-names-for-sale.uzxocantailim.info/2005-07-17.html
  10. http://apachephotos.pratereoutdra.info/2005-09-16.html
  11. http://gkstar.manotiifrast.info/2005-07-06.html
  12. http://ilawaid.imikkladanno.info/2005-09-16.html
  13. http://britanicindia.imikkladanno.info/2005-08-02.html
  14. http://noprop81.perekatinetuzaba.info/2005-09-23.html
  15. http://groehldistributors.zhabartufa.info/2005-07-15.html
  16. http://datadak.perekatinetuzaba.info/2005-08-25.html
  17. http://tjenpenger-no.uzxocantailim.info/2005-07-11.html
  18. http://hauterive-saintjames.zhabartufa.info/2005-07-18.html
  19. http://victorfiglin.qupitaratersadno.info/2005-07-26.html
  20. http://calcuttacoffee.qupitaratersadno.info/2005-10-05.html
  21. http://kcplan.trudnodostupna.info/2005-09-10.html
  22. http://thediscountvitaminstore.lopatajovtara.info/2005-08-04.html
  23. http://waltons.uzxocantailim.info/2005-10-01.html
  24. http://domains-names-for-sale.uzxocantailim.info/2005-10-04.html
  25. http://massergycommunications.wertzaobtara.info/2005-08-09.html
  26. http://phpaid.manotiifrast.info/2005-09-24.html
  27. http://www.ruby-forum.com/
  28. mailto:removed_email_address@domain.invalid
  29. http://lists.ruby-it.org/mailman/listinfo/ml
  30. mailto:removed_email_address@domain.invalid
  31. http://lists.ruby-it.org/mailman/listinfo/ml