Ruby Telnet Lib - 奇怪的响应

Posted

技术标签:

【中文标题】Ruby Telnet Lib - 奇怪的响应【英文标题】:Ruby Telnet Lib - Weird Response 【发布时间】:2011-03-27 22:16:52 【问题描述】:

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

*=============================================== ================= 欢迎使用 Microsoft Telnet 服务器。 *================================================== =============== 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(...)  

任何帮助将不胜感激。

谢谢, J

**编辑:

@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 更多的?

显然,我什至不能发送多个命令。我的提示正则表达式错了吗?我试图让..

C:[任何东西...]>

【问题讨论】:

请显示您正在发送的命令的全文,显然任何用户名和密码除外。 最后一个反斜杠通常意味着“下一行还有更多内容”我相信... 您对此有什么回应吗?我遇到了同样的问题。准备放弃 Ruby 转用 Python。 【参考方案1】:

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

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

【讨论】:

以上是关于Ruby Telnet Lib - 奇怪的响应的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 和 telnet:waitfor 不起作用

在 telnet 会话中使用变量

通过 Ruby Telnet 发送转义序列

RUBY 脚本:连接到 Telnet 会话时等待任何输出

Node JS telnet 服务器奇怪的输入和奇怪的输出

Learning Python telnet.lib