[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Telnet question

rolfedh@hotmail.com

2/18/2006 1:43:00 AM

I'll ask the questions first, and then show the code and examples
below:

waitfor is timing the script out. Is it because it isn't recognizing
that password input is complete? or is it because the device doesn't
issue a command prompt after the password is input? (The user has to
hit the Enter key to get the command prompt)?

I've interjected comments on the behavior of the script with <ROLFE-...
below.

I'm running the following script to log on to a peice of hardware:

require 'net/telnet'

tn = Net::Telnet.new('Host' => '192.168.47.150') { |str|
print str }
tn.login("myusername", "mypassword") { |str| print str }

This is how script displays in FreeRIDE:

>ruby c:/Documents and Settings/rdlugyhegwer/sampler.rb
Trying 192.168.47.150...
Connected to 192.168.47.150.
WELCOME TO SYMMETRICOM NETWORK INTERFACE!
USER NAME: myusername

<ROLFE-It pauses here for a little while, and then continues with:>

PASSWORD: mypassword
NETWORK INTERFACE 192-8001 (c) 1998 - 2006 SYMMETRICOM
ALL RIGHTS RESERVED
LOGIN SUCCESSFUL!

c:/ruby/lib/ruby/1.8/net/telnet.rb:551:in `waitfor': timed out
while waiting for more data (Timeout::Error)
from c:/ruby/lib/ruby/1.8/net/telnet.rb:678:in `cmd'
from c:/ruby/lib/ruby/1.8/net/telnet.rb:725:in `login'
from c:/Documents and Settings/rdlugyhegwer/sampler.rb:4
>exit


If I log in using a terminal program, it looks like this:

WELCOME TO SYMMETRICOM NETWORK INTERFACE!
USER NAME: myusername
PASSWORD: *****
NETWORK INTERFACE 192-8001 (c) 1998 - 2006 SYMMETRICOM
ALL RIGHTS RESERVED
LOGIN SUCCESSFUL!

<ROLFE - the user must hit the ENTER key on this blank line to get the
command prompt>
>quit

GOODBYE.

Any suggestions? I've read a lot of the documentation online and tried
variations on the telnet.rb sourcecode. Your help would be very much
appreciated...

4 Answers

samuel.murphy

2/18/2006 4:00:00 AM

0

Look at 'expect', it's the standard tool to handle the dialog
interaction.

http://rubyforge.org/project...

See page 676 in 'Programming Ruby'

William Ramirez

2/18/2006 4:10:00 AM

0

On 2/17/06, Sammyo <samuel.murphy@gmail.com> wrote:
>
> Look at 'expect', it's the standard tool to handle the dialog
> interaction.
>
>

Net::Telnet has a similiar command: waitfor

It may be that you have to use write and waitfor to accomplish logins on the
system you're using. I was doing some work with some cisco devices a while
back and I had to kludge my way past a few things with those commands.

rolfedh@hotmail.com

2/22/2006 6:48:00 PM

0

As a relative newbie, I was frustrated by the lack of good
documentation/comments for RExpect. It seems from other postings to
this list that RExpect doesn't play well with Windows. I decided to use
a different approach explained in a separate reply to this thread.

require 'net/telnet'
require 'time'

t = Time.now
this_time = t.strftime("%y_%m_%d_%H_%M_%S")


tn = Net::Telnet.new( 'Host' => '192.168.47.150',
"Output_log" => "./logs/" + this_time + ".txt")
{ |str| print str }
sleep 1
tn.puts("operator") { |str| print str }
sleep 1
tn.puts('janus') { |str| print str }

#Skip line with no prompt that appears after logging in
tn.puts ''

#Time zone offset
tn.puts("F1")
sleep 1

rolfedh@hotmail.com

2/22/2006 6:50:00 PM

0

After even more tinkering with waitfor and other methods, I ultimately
chose the following BFI approach (which worked!):

require 'net/telnet'
require 'time'

t = Time.now
this_time = t.strftime("%y_%m_%d_%H_%M_%S")


tn = Net::Telnet.new( 'Host' => '192.168.47.150',
"Output_log" => "./logs/" + this_time + ".txt")
{ |str| print str }
sleep 1
tn.puts("operator") { |str| print str }
sleep 1
tn.puts('janus') { |str| print str }

#Skip line with no prompt that appears after logging in
tn.puts ''

#Time zone offset
tn.puts("F1")
sleep 1