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 - 奇怪的响应的主要内容,如果未能解决你的问题,请参考以下文章