如何使用ruby Net :: telnet cmd方法发送“ctrl + z”?

时间:2012-06-08 14:15:25

标签: ruby telnet

这是我的秘密,

我正在使用Net :: Telnet :: new编写ruby客户端,另一端服务器是ubuntu。 我添加了一个eventmachine来监视Net :: Telnet :: new创建的套接字。

这是我的问题, 例如,我使用cmd方法发送命令:

client.cmd(" ping 127.0.0.1")然后eventmachine继续输出响应。 我想停止ping进程并停止ping响应,所以我需要发送命令" Ctrl + z"或者服务器的某些东西(比如我们使用telnet终端)。

所以我怎么能用ruby做到这一点?我试过238.chr,237.chr,236.chr。那些没有用的。我也试图发送26.chr,这个停了下来。但我的代码挂在那里,在发送26.chr之后我无法用cmd方法发送另一个命令。

这里有一些代码,请忽略ws.onopen,ws.onmessage,这些只是eventmachine中的websocket。

     ws.onopen    { 
                puts "Web socket is opened"
                ws.send "terminal to the node"
                          $nodeSocket = Net::Telnet::new("Host" => "10.4.0.50","Timeout" => 10,"Prompt" => /login/ )
                          puts $nodeSocket


                $nodeSocket.cmd("String" =>"user","Match" => /Password/) { |c| ws.send c}
                $nodeSocket.cmd("String" => "password","Match" => /\$/) { |c| ws.send c}




               Thread.new do  
                   EM.run{
                          $conn = EM.watch $nodeSocket.getSocket,Foo,ws
                          $conn.notify_readable = true
                   }
                end


      }

      ws.onmessage { |msg| 
                begin 
                    puts msg

                      if msg =~ /command:(.*)/
                        puts $1
                        if $1 == "stop" 

                              $nodeSocket.cmd(26.chr) 
                              $nodeSocket.cmd("ls -l") 
                              $nodeSocket.cmd("pwd") 

                        else 

                              $nodeSocket.cmd($1) 
                        end
                      end
                      ws.send msg
                rescue
                    puts "there's an error happened"
                end



      }

0 个答案:

没有答案