Ruby Telnet Lib - странный ответ - PullRequest
1 голос
/ 10 августа 2010

Я пытаюсь выполнить cmds на удаленном процессоре через telnet. Хотя некоторые отправленные команды (через Ruby's stdlib для telnet) успешны, другие дают мне странный ответ:

* ============================================== =================
Добро пожаловать на сервер Microsoft Telnet.
* ================================================= ==============
C: \ Documents and Settings \ UserJW> ls
Desktop
Избранные
Мои документы
Меню Пуск
Sti_Trace.log

C: \ Documents and Settings \ UserJW> cd \
Больше?

Почему телнет дает мне это "Больше"? ответ, как будто ожидал чего-то?

В коде я просто подключаюсь к удаленному ЦП, регистрируюсь и отправляю команды:

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

Буду признателен за любую помощь.

Спасибо, J

** EDIT:

@connection = Net::Telnet.new(<br> "Host" => machine,<br> "Prompt" => /[A-Za-z]:\\.*>\z/n,<br> "Timeout" => 3,<br> "Output_log" => output )<br> @connection.login( user, pwd )<br> @connection.cmd( 'ls' )<br> @connection.cmd( 'ls' )

вывод ...

C: \ Documents and Settings \ UserJW>
Ls
Desktop
Избранные
Мои документы
Меню Пуск
Sti_Trace.log
C: \ Documents and Settings \ UserJW>
Ls
Больше?

Я даже не могу отправить больше одной команды, по-видимому. Правильно ли мое регулярное выражение? Я пытаюсь разрешить ..

C: [ничего ...]>

1 Ответ

0 голосов
/ 08 мая 2013

Я столкнулся с той же проблемой с вами ( ruby ​​telnet для Windows 2008, ошибка выполнения команды ). Я решил ее. причина в том, что библиотека ruby ​​net / telnet использует ошибку перевода строки. Должно быть EOL (CR + LF), но CR + NULL. Но я не знаю, кто делает ошибку, 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
...