J. Walker
J. Walker

Reputation: 11

Ruby Telnet Lib - Weird Response

I am trying to execute cmds on a remote CPU through telnet. While some commands sent (through Ruby's stdlib for telnet) are successful, others are giving me a weird response:

*===============================================================
Welcome to Microsoft Telnet Server.
*===============================================================
C:\Documents and Settings\UserJW>ls
Desktop
Favorites
My Documents
Start Menu
Sti_Trace.log

C:\Documents and Settings\UserJW>cd\
More?

Why is telnet giving me this "More?" response, as if expecting something?

In the code, I am simply connecting to remote CPU, logging in, and sending commands:

@connection = Net::Telnet.new(...)  
@connection.login( user, pwd )  
@connection.cmd(...)  

Any help would be appreciated.

Thanks, J

**EDIT:

@connection = Net::Telnet.new(
"Host" => machine,
"Prompt" => /[A-Za-z]:\\.*>\z/n,
"Timeout" => 3,
"Output_log" => output )
@connection.login( user, pwd )
@connection.cmd( 'ls' )
@connection.cmd( 'ls' )

output...

C:\Documents and Settings\UserJW>
ls
Desktop
Favorites
My Documents
Start Menu
Sti_Trace.log
C:\Documents and Settings\UserJW>
ls
More?

I can't even send more than one command, apparently. Is my Prompt regex wrong? I'm trying to allow..

C:[anything...]>

Upvotes: 1

Views: 891

Answers (1)

troy
troy

Reputation: 1

I meet a same problem with you ( ruby telnet to windows 2008 ,execute command error ).I solved it. the reason is ruby net/telnet library use error newline seperator. Must be EOL(CR+LF) but CR+NULL . But I don't know who make the bug,windows or ruby? I write a monkey patch as below:

class Net::Telnet
    def print(string)
      string = string.gsub(/#{IAC}/no, IAC + IAC) if @options["Telnetmode"]

      if @options["Binmode"]
        self.write(string)
      else
        if @telnet_option["BINARY"] and @telnet_option["SGA"]
          self.write(string.gsub(/\n/n, CR))
        elsif @telnet_option["SGA"]
          self.write(string.gsub(/\n/n, EOL)) ### fix here. reaplce CR+NULL bY EOL
        else
          self.write(string.gsub(/\n/n, EOL))
        end
      end
    end
end

Upvotes: 0

Related Questions