2009-06-08 20 views
1

私はRubyには全く新しく、基本的なスクリプトを作成するためにそれを使用しようとしています。つまりtelnetでマシンに入り、dos ftpクライアントを使っていくつかのファイルを引き出します。パスワード入力のプロンプト中にRuby telnetがハングアップする

私は(コマンドプロンプトから)手動マシンにtelnet接続しようとしたとき、私は持っている問題は、私は次のメッセージが出ます:

Welcome to Microsoft Telnet Client 

Escape Character is 'CTRL+]' 

You are about to send your password information to a remote computer in Internet zone. This might not be safe. Do you want to send anyway(y/n): 

私はルビーのTelnetクラス(ネット/使用telnet)login()パスワードプロンプトでハングアップします。これは、メッセージにユーザー名を、ユーザー名のプロンプトにパスワードを送信することで、メッセージを考慮していないと思うようになります。どのようにこの状況に対処しますか?

編集:パスワードプロンプト中にログインプロセスがハングアップしているようです。これが上記のメッセージによって引き起こされたのは私の疑念であり、他のアイデアは高く評価されます。私はすべてをエコーし​​ようとした私は、次を得る:

irb(main):030:0> tn = Net::Telnet::new("Host"=>"xxx.xxx.xxx.xxx", "Timeout"=>10) => #<TCPSocket:0x2d8aafc> 
irb(main):031:0> tn.login("administrator", "password") {|c| print c} 
Welcome to Microsoft Telnet Service 

login: administrator 
password: Timeout::Error: timed out while waiting for more data 
     from C:/Ruby/lib/ruby/1.8/net/telnet.rb:551:in `waitfor' 
     from C:/Ruby/lib/ruby/1.8/net/telnet.rb:685:in `cmd' 
     from C:/Ruby/lib/ruby/1.8/net/telnet.rb:730:in `login' 
+1

これはおそらく問題がタイムアウト時間があまりにも短かったからです(回答を参照) –

答えて

2

まず第一に、あなたが起こっているすべてのものを見ることができるように、Output_logパラメータを渡してみてください。

host = Net::Telnet::new(
     "Host"  => "localhost", 
     "Port"  => 23, 
     "Output_log" => "output_log") 

これはあなたが何を伝えるかどうかを確認します差が出るかもしれない唯一の他の選択肢は、Binmode => falseです。

チェック

編集1 :-)詳細はdocsは:またPromptオプションをチェックすることがあります。どうやらコマンドがいつ終わったのかを決めるのは明らかだ。サーバー上のプロンプトと一致しない場合は、ほぼ確実にそれを混乱させるでしょう。

3

私はそれを理解しました。他の人が問題にぶつかるチャンスでこれを削除するつもりはないが、私のタイムアウトはあまりにも低く設定されている。それを25に設定すると問題が解決しました。

+1

これは答えとして選択して、他の人が解決策に到達したことを確認する必要があります:-) –

+0

10秒後に時期尚早にタイムアウトしている場合は、タイムアウトをnilに設定し、connect()コールでタイムアウトを処理させます。 –

関連する問題