Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > net/telnetライブラリ > Net::Telnetクラス

class Net::Telnet

クラスの継承リスト: Net::Telnet < SimpleDelegator < Delegator < Object < Kernel

要約

このクラスは telnet のクライアント機能を提供します。

このクラスは接続に利用している ソケットオブジェクト(通常は TCPSocket)のメソッドを すべて利用することができます(SimpleDelegator を用いて います)。 これによって、IO#close で接続を 閉じたり、IO#sysreadNet::Telnet#waitfor を 使わずにデータを直接読むことができます。

telnet でリモートホストにログインしてシェル経由で コマンドを実行することを考えてみましょう。 これを Net::Telnet で実現するためには、 まず Net::Telnet.new に "Host" オプションを 与えてオブジェクトを作り、 Net::Telnet#login で ユーザ名とパスワードを送ってログインし、 Net::Telnet#cmd でコマンドを 実行、最後に IO#close で接続を閉じます。 Net::Telnet#waitfor, Net::Telnet#print, Net::Telnet#puts, Net::Telnet#write などと いったメソッドはより複雑なことをする場合にのみ使ってください。

Net::Telnet のオブジェクトは SMTP や HTTP のような telnet で ないサービスにも利用できます。この場合には Net::Telnet.new に "Port" オプションを与えることで ポートを指定する必要があるでしょう。また、 "Telnetmode" オプションに false を 渡すことで telnet のコマンド列を解釈しないように しなければなりません。Net::Telnet#login は普通 うまく動かないので、認証をプログラマ自身が実装 する必要があります。

通信プロトコルによっては、Net::Telnet.new に"Prompt" を渡しておいて Net::Telnet#cmd をうまく動作させることが できるかもしれません。 また、Net::Telnet#cmd を呼ぶごとに "Match" を 指定しても同様のことができます。 また、Net::Telnet#putsNet::Telnet#waitfor を 直接使ってやりとりすることもできます。 それでうまくいかない場合は、 IO#sysread を直接呼ぶ必要があるかもしれません。

Net::Telnet.new には "Proxy" オプションで指定した オブジェクトを通して通信をすることができます。 "Proxy" オプションに Net::Telnet のオブジェクトを 渡した場合には、通信路が共用されます。Socket のような読み書き可能な IO オブジェクトを渡した場合には、 そのオブジェクトを通してやり取りが行われます。 この機能はユニットテストをする場合などに便利でしょう。

使用例

ログインしてコマンドを送る例、リモートホストから返ってきた文字列は すべて標準出力に表示する

require 'net/telnet'

# リモートホスト "foobar" に接続
# タイムアウトは 10 秒
localhost = Net::Telnet.new("Host" => "localhost",
                            "Timeout" => 10)

# ログインし、プロンプトが出るまで待ち合わせる
telnet.login("your name", "your password") {|c| print c}

# ls コマンドを実行し、実行後、プロンプトが出るまで待ち合わせる
telnet.cmd("ls") {|c| print c}

# sleep で 5 秒
telnet.cmd("sleep 5 && echo foobar &") {|c| print c}

STDOUT.flush # <- これがないとここまで処理が来てることがわかりにくい

# 前のコマンドの出力を待ち合わせる
telnet.waitfor(/foobar\Z/) {|c| print c}

# ログインセッションの終了
telnet.cmd("exit") {|c| print c}
telnet.close

POP サーバにメールが来ているかどうかを見る。リモートホストからきた文字列は すべて標準出力に表示

require 'net/telnet'

# リモートホスト(POPサーバ) "foobar" に接続
# ポート番号は110(POPのwell-knownポート)、
# "Telnetmode" は off (telnet用の特殊なバイト列を解釈しない)、
# Prompt (コマンドの区切り) は POP の仕様により /^\+OK/n とする
pop = Net::Telnet::new("Host" => "foobar",
                       "Port" => 110,
                       "Telnetmode" => false,
                       "Prompt" => /^\+OK/n)
# 認証をする
# Net::Telnet#login は使えない(ログインのコマンドが異なる)ので
# Net::Telnet#cmd でユーザ名とパスワードを送る
pop.cmd("user " + "your_username") { |c| print c }
pop.cmd("pass " + "your_password") { |c| print c }

# list コマンドで来ているメールを表示する
pop.cmd("list") { |c| print c }

# 終了する
pop.close

特異メソッド

定義 説明
new(opts) -> Net::Telnet
new(opts) {|message| ... } -> Net::Telnet

Telnet オブジェクトを生成します。

インスタンスメソッド

定義 説明
binmode(mode=nil) -> bool|()

引数を指定しない場合には"Binmode"の値を返します。 引数を与えた場合は"Binmode"の値を変更します。

binmode=(mode)

"Binmode" を設定します。これは改行文字の変換をするかどうかを意味します。

cmd(opts) -> String
cmd(opts) {|mesg| ...} -> String

コマンドをホストに送ります。

login(opts, password=nil) -> String
login(opts, password=nil) {|mesg| ...} -> String

指定したユーザ名とパスワードでログインします。

preprocess(string) -> String

ホストから受け取った文字列の前処理をします。

print(string) -> ()

ホストに文字列を送ります。

puts(string) -> ()

改行を付加した文字列をホストに送ります。

sock -> IO

リモートホストに接続している IO オブジェクトを返します。

telnetmode(mode=nil) -> bool|()

引数を指定しない場合には"Telnetmode"の値を返します。 引数を与えた場合は"Telnetmode"の値を変更します。

telnetmode=(mode)

"Telnetmode" を設定します。これは telnet の特殊なバイト列を解釈するかどうかを 意味します。

waitfor(opt) -> String|nil
waitfor(opt) {|buf| ...} -> String|nil

指定した正規表現にマッチする文字列がホストから来るまでデータを読み込みます。

write(string) -> ()

ホストに文字列を送ります。 文字列に変換は一切施しません。

継承したメソッド

marshal_dump marshal_load method_missing respond_to? ::IgnoreBacktracePat == === =~ __id__ __send__ _dump class dclone display enum_for eql? equal? extend freeze frozen? hash initialize initialize_copy inspect instance_eval instance_exec instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? method methods nil? pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods public_methods remove_instance_variable singleton_method_added singleton_method_removed singleton_method_undefined singleton_methods taint tainted? tap to_a to_ary to_hash to_int to_io to_proc to_regexp to_s to_str to_yaml to_yaml_properties to_yaml_style untaint __getobj__ __setobj__ clone

追加されるメソッド

定義 説明 ライブラリ
preprocess(string) net/telnets
ssl net/telnets
ssl? net/telnets
waitfor(options) net/telnets