我正在尝试通过telnet在远程CPU上执行cmds。虽然发送的一些命令(通过Ruby的stdlib for telnet)是成功的,但其他命令给了我一个奇怪的回应:
* ============================================== =================
欢迎使用Microsoft Telnet Server * ================================================= ==============
C:\ Documents and Settings \ UserJW> ls
桌面
收藏
我的文件
开始菜单
Sti_Trace.logC:\ 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:[什么...]>
答案 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