Ruby Telnet Lib - 奇怪的回应

时间:2010-08-10 16:00:55

标签: ruby telnet

我正在尝试通过telnet在远程CPU上执行cmds。虽然发送的一些命令(通过Ruby的stdlib for telnet)是成功的,但其他命令给了我一个奇怪的回应:

  

* ============================================== =================
  欢迎使用Microsoft Telnet Server   * ================================================= ==============
  C:\ Documents and Settings \ UserJW> ls
  桌面
  收藏
  我的文件
  开始菜单
  Sti_Trace.log

     

C:\ Documents and Settings \ UserJW> cd \
  更多?

为什么telnet给我这个“更多?”回应,仿佛在期待什么?

在代码中,我只是连接到远程CPU,登录和发送命令:

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

任何帮助将不胜感激。

谢谢, Ĵ

**编辑:

@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' )

输出......

  

C:\ Documents and Settings \ UserJW>
  LS
  桌面
  收藏
  我的文件
  开始菜单
  Sti_Trace.log
  C:\ Documents and Settings \ UserJW>
  LS
  更多?

显然,我甚至无法发送多个命令。我的Prompt正则表达式错了吗?我想允许..

C:[什么...]>

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题(ruby telnet to windows 2008 ,execute command error)。我解决了。原因是ruby net / telnet库使用错误换行分隔符。必须是EOL(CR + LF)但CR + NULL。但我不知道是谁制造了这个虫子,窗户还是红宝石?我写了一个猴子补丁如下:

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