Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > net/telnetライブラリ > 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#puts や Net::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
|
Telnet オブジェクトを生成します。 |
定義 | 説明 | |
---|---|---|
binmode(mode=nil) -> bool
|
引数を指定しない場合には"Binmode"の値を返します。引数を与えた場合は"Binmode"の値を変更します。 |
|
binmode=(mode)
|
"Binmode" を設定します。これは改行文字の変換をするかどうかを意味します。 |
|
close -> ()
|
通信路を閉じます。 |
|
cmd(opts) -> String
|
コマンドをホストに送ります。 |
|
login(opts, password=nil) -> 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
|
指定した正規表現にマッチする文字列がホストから来るまでデータを読み込みます。 |
|
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__