【问题标题】:Ruby Telnet Lib - Weird ResponseRuby Telnet Lib - 奇怪的响应
【发布时间】: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。

标签: ruby telnet


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-20
    • 2013-02-08
    • 2018-09-28
    • 2020-08-10
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多