Python の telnetlib モジュール
 
1969 年に IETF またはインターネットエンジニアリングタスクフォースとして標準化された Telnet プロトコルは、信頼性の高いコネクション型トランスポートに基づくクライアントサーバープロトコルです。
これは、LAN またはローカルエリアネットワークおよびインターネットで使用されるアプリケーションプロトコルです。Telnet プロトコルは、仮想端末(コンピューター端末または電子ハードウェアデバイス)接続を介して、双方向(双方向)の対話型テキスト指向通信機能を提供します。
Telnet プロトコルでは、ユーザーのデータは、TCP または伝送制御プロトコルを介した 8 ビットのバイト指向のデータ接続に分散されます。Python プログラミング言語には、Telnet プロトコルを実装する telnetlib モジュールがあります。
この記事では、telnetlib ライブラリについて学習します。
Python の telnetlib ライブラリ
telnetlib モジュールには、Telnet プロトコルの実際の実装を保持するクラス Telnet があります。
このクラスは、Telnet サーバーへのセットアップ接続を表します。Telnet クラスコンストラクタは、host と port の 2つのパラメータを受け入れます。デフォルトでは、ホストは None であり、ポートは 0 です。
以下は、Telnet クラスの署名です。
class telnetlib.Telnet(host=None, port=0)
Telnet クラスには次のメソッドがあります。
- read_until(expected, timeout = None)- 指定されたバイト文字列- expectedが見つかるまで、または- timeout秒数が経過するまで読み取ります。
- read_all()- EOF またはファイルの終わりが見つかるまで、すべてのデータをバイトとして読み取ります。また、接続が閉じられるまでブロックします。
- read_some()- EOF が検出されるまで、少なくとも- 1バイトのデータを読み取ります。
- read_very_eager()- 入出力または I/O 操作をブロックせずに、可能な限りすべてを読み取ります。
- read_eager()- すぐに利用できるすべてのデータを読み取ります。
- read_lazy()- すでにキュー内にあるデータを処理して返します。
- read_very_lazy()- キューで利用可能なすべてのデータを返します。
- read_sb_data()- SB / SE ペアまたはサブオプション開始/サブオプション終了の間で収集されたデータを返します。
- open(host, post = 0)- デフォルトの Telnet プロトコルポート- 23を使用して、指定されたホストに接続します。ここで、- 0はポート- 23を指します。
- msg(msg, *args)- デバッグレベルが- 0より大きい場合、デバッグメッセージを出力します。すべての追加の引数は、標準の文字列フォーマット演算子または- %を使用してメッセージの代わりに使用されます。
- set_debuglevel(debuglevel)- デバッグレベルを設定します。
- close()- Telnet サーバーへの接続を閉じます。
- get_socket()- 内部で使用されるソケットオブジェクトを返します。
- fileno()- 内部で使用されるソケットオブジェクトのファイル記述子を返します。
- write(buffer)- 接続のソケットにバイト文字列を書き込みます。
- interact()- これは、非常にダムな Telnet クライアントをエミュレートまたは照合するインタラクティブな関数です。
- mt_interact()- マルチスレッドの相互作用関数。
- expect(list, timeout = None)- 正規表現のリストから 1つの正規表現が一致するまでデータを読み取ります。
- set_option_negotiation_callback(callback)- 入力データフローで telnet オプションが読み取られるたびに、このコールバック関数が次のパラメーターで呼び出されます:callback(telnet socket、command(DO / DONT / WILL / WONT)、option)。その後、- telnetlibモジュールによって他の操作は実行されません。
例
以下は、telnetlib モジュールの使用法を説明しようとする簡単な例です。次の Python コードを参照してください。
import getpass
import telnetlib
host = "127.0.0.1"
user = input("Username: ")
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"))
上記の Python スクリプトは、コンピューターシステムのループバックアドレスである localhost または 127.0.0.1 に接続します。
次に、ユーザー名とパスワードの 2つの入力が必要です。getpass モジュールを使用すると、パスワードを視覚的に安全に公開せずに入力できます。次に、スクリプトは Telnet クラスを使用してホストに接続します。
そして、ユーザ名とパスワードの入力を Login: と Password: の文字列の横に書き込みます。最後に、ls および exit コマンドを実行し、read_all() メソッドを使用してすべてのバイトデータを読み取ります。
