telnetlib —Telnetクライアント
ソースコード: :source: `Lib / telnetlib.py`
telnetlib モジュールは、Telnetプロトコルを実装する Telnet クラスを提供します。 プロトコルの詳細については、 RFC 854 を参照してください。 さらに、プロトコル文字(以下を参照)およびtelnetオプションの記号定数を提供します。 telnetオプションの記号名は、arpa/telnet.h
の定義に従い、先頭のTELOPT_
は削除されています。 従来arpa/telnet.h
に含まれていなかったオプションの記号名については、モジュールソース自体を参照してください。
telnetコマンドのシンボリック定数は、IAC、DONT、DO、WONT、WILL、SE(サブネゴシエーション終了)、NOP(操作なし)、DM(データマーク)、BRK(ブレーク)、IP(割り込みプロセス)、AO(出力の中止)、AYT(Are You There)、EC(Erase Character)、EL(Erase Line)、GA(Go Ahead)、SB(サブネゴシエーション開始)。
- class telnetlib.Telnet(host=None, port=0[, timeout])
Telnet は、Telnetサーバーへの接続を表します。 インスタンスは最初はデフォルトで接続されていません。 接続を確立するには、 open()メソッドを使用する必要があります。 または、ホスト名とオプションのポート番号をコンストラクターに渡すこともできます。その場合、コンストラクターが戻る前にサーバーへの接続が確立されます。 オプションの timeout パラメーターは、接続試行などのブロック操作のタイムアウトを秒単位で指定します(指定されていない場合は、グローバルなデフォルトのタイムアウト設定が使用されます)。
すでに接続されているインスタンスを再度開かないでください。
このクラスには多くの
read_*()
メソッドがあります。 他の理由で空の文字列を返す可能性があるため、接続の終わりが読み取られたときに EOFError を発生させるものがあることに注意してください。 以下の個別の説明を参照してください。Telnet オブジェクトはコンテキストマネージャーであり、 with ステートメントで使用できます。
with
ブロックが終了すると、 close()メソッドが呼び出されます。>>> from telnetlib import Telnet >>> with Telnet('localhost', 23) as tn: ... tn.interact() ...
バージョン3.6で変更:コンテキストマネージャーのサポートが追加されました
Telnetオブジェクト
Telnet インスタンスには次のメソッドがあります。
- Telnet.read_until(expected, timeout=None)
指定されたバイト文字列 expected が検出されるまで、または timeout 秒が経過するまで読み取ります。
一致するものが見つからない場合は、代わりに使用可能なもの、場合によっては空のバイトを返します。 接続が閉じていて、クックされたデータが利用できない場合は、 EOFError を発生させます。
- Telnet.read_all()
- EOFまでのすべてのデータをバイトとして読み取ります。 接続が閉じるまでブロックします。
- Telnet.read_some()
- EOFがヒットしない限り、少なくとも1バイトのクックされたデータを読み取ります。 EOFがヒットした場合は、
b
を返します。 すぐに利用できるデータがない場合はブロックします。
- Telnet.read_very_eager()
I / Oをブロックせずにできることをすべて読んでください(熱心に)。
接続が閉じていて、クックされたデータが利用できない場合は、 EOFError を発生させます。 それ以外の方法で利用可能な調理済みデータがない場合は、
b
を返します。 IACシーケンスの途中でない限り、ブロックしないでください。
- Telnet.read_eager()
すぐに利用できるデータを読みます。
接続が閉じていて、クックされたデータが利用できない場合は、 EOFError を発生させます。 それ以外の方法で利用可能な調理済みデータがない場合は、
b
を返します。 IACシーケンスの途中でない限り、ブロックしないでください。
- Telnet.read_lazy()
すでにキューにあるデータを処理して返します(遅延)。
接続が閉じていてデータが利用できない場合は、 EOFError を発生させます。 それ以外の方法で利用可能な調理済みデータがない場合は、
b
を返します。 IACシーケンスの途中でない限り、ブロックしないでください。
- Telnet.read_very_lazy()
クックされたキューで利用可能なデータを返します(非常に怠惰です)。
接続が閉じていてデータが利用できない場合は、 EOFError を発生させます。 それ以外の方法で利用可能な調理済みデータがない場合は、
b
を返します。 このメソッドはブロックしません。
- Telnet.read_sb_data()
- SB / SEペア間で収集されたデータを返します(サブオプションの開始/終了)。 コールバックは、
SE
コマンドで呼び出されたときに、これらのデータにアクセスする必要があります。 このメソッドはブロックしません。
- Telnet.open(host, port=0[, timeout])
ホストに接続します。 オプションの2番目の引数はポート番号で、デフォルトでは標準のTelnetポート(23)になります。 オプションの timeout パラメーターは、接続試行などのブロック操作のタイムアウトを秒単位で指定します(指定されていない場合は、グローバルなデフォルトのタイムアウト設定が使用されます)。
すでに接続されているインスタンスを再度開かないでください。
- Telnet.msg(msg, *args)
- デバッグレベルが
>
0の場合、デバッグメッセージを出力します。 追加の引数が存在する場合、それらは標準の文字列フォーマット演算子を使用してメッセージに置き換えられます。
- Telnet.set_debuglevel(debuglevel)
- デバッグレベルを設定します。 debuglevel の値が高いほど、(
sys.stdout
で)より多くのデバッグ出力が得られます。
- Telnet.close()
- 接続を閉じます。
- Telnet.get_socket()
- 内部で使用されているソケットオブジェクトを返します。
- Telnet.fileno()
- 内部で使用されるソケットオブジェクトのファイル記述子を返します。
- Telnet.write(buffer)
IAC文字を2倍にして、ソケットにバイト文字列を書き込みます。 接続がブロックされている場合、これはブロックされる可能性があります。 接続が閉じている場合、 OSError が発生する可能性があります。
バージョン3.3で変更:このメソッドは、 socket.error を発生させるために使用されていました。これは、 OSError のエイリアスになりました。
- Telnet.interact()
- インタラクション関数は、非常に馬鹿げたTelnetクライアントをエミュレートします。
- Telnet.mt_interact()
- interact()のマルチスレッドバージョン。
- Telnet.expect(list, timeout=None)
正規表現のリストから1つが一致するまで読み取ります。
最初の引数は、コンパイル済み(正規表現オブジェクト)または未コンパイル(バイト文字列)の正規表現のリストです。 オプションの2番目の引数は、秒単位のタイムアウトです。 デフォルトでは、無期限にブロックされます。
3つの項目のタプルを返します。一致する最初の正規表現のリスト内のインデックス。 返された一致オブジェクト。 そして、バイトは一致するまで読み取られます。
ファイルの終わりが見つかり、バイトが読み取られなかった場合は、 EOFError を発生させます。 それ以外の場合、一致するものがない場合は、
(-1, None, data)
を返します。ここで、 data はこれまでに受信したバイトです(タイムアウトが発生した場合は空のバイトである可能性があります)。正規表現が貪欲な一致(
.*
など)で終了する場合、または複数の式が同じ入力に一致する可能性がある場合、結果は非決定的であり、I / Oタイミングに依存する可能性があります。
- Telnet.set_option_negotiation_callback(callback)
- 入力フローでtelnetオプションが読み取られるたびに、この callback (設定されている場合)が次のパラメーターで呼び出されます:callback(telnet socket、command(DO / DONT / WILL / WONT)、option)。 その後、telnetlibによって他のアクションは実行されません。
Telnetの例
典型的な使用法を説明する簡単な例:
import getpass
import telnetlib
HOST = "localhost"
user = input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until(b"login: ")
tn.write(user.encode('ascii') + b"\n")
if password:
tn.read_until(b"Password: ")
tn.write(password.encode('ascii') + b"\n")
tn.write(b"ls\n")
tn.write(b"exit\n")
print(tn.read_all().decode('ascii'))