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

class Net::Telnet

クラス・モジュールの継承リスト: Net::Telnet < SimpleDelegator < Delegator < Object < Kernel < BasicObject

要約

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

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" を設定します。これは改行文字の変換をするかどうかを意味します。

close -> ()

通信路を閉じます。

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) -> ()

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

継承したメソッド

__id__ __send__ instance_eval instance_exec singleton_method_added singleton_method_removed singleton_method_undefined ! != == freeze marshal_dump marshal_load method_missing methods protected_methods public_methods respond_to? respond_to_missing? !~ <=> === =~ _dump class clone define_singleton_method display enum_for eql? equal? extend frozen? hash initialize initialize_copy inspect instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself method must_be must_be_close_to must_be_empty must_be_instance_of must_be_kind_of must_be_nil must_be_same_as must_be_within_epsilon must_equal must_include must_match must_raise must_respond_to must_send must_throw nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods psych_to_yaml public_method public_send remove_instance_variable send singleton_class singleton_method singleton_methods taint tainted? tap to_a to_ary to_hash to_int to_io to_proc to_regexp to_s to_str trust untaint untrust untrusted? .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE __getobj__ __setobj__