Telnet question

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:inlogin’
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…

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

http://rubyforge.org/projects/rexpect/

See page 676 in ‘Programming Ruby’

On 2/17/06, Sammyo [email protected] 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.

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

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