CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
みなさん、こんにちは。
前回に続き、ネットワーク自動化に活用できるPythonのモジュールやライブラリを紹介していきましょう。前回は、subprocess ライブラリに焦点を当てましたが、今回はネットワークデバイスとの対話に使えるPythonのモジュールである telnetlib ライブラリにスポットを当てます。
telnetlib ライブラリは、Pythonの標準ライブラリに含まれており、Telnetプロトコルをサポートするためのものです。Telnetは、ネットワーク機器やサーバーと対話的に通信するためのプロトコルの一つです。
以下は、telnetlib ライブラリを使用してTelnetセッションを開始し、コマンドを送信する基本的な例です。ここでは、ヤマハのルータRTX1210に接続して、情報を取得しています。
import telnetlib
# Telnet接続先の情報
host = "192.168.10.254"
port = 23 # デフォルトのTelnetポート番号
# Telnetセッションの開始
tn = telnetlib.Telnet(host, port)
# ユーザー名とパスワードの送信
tn.read_until(b"Password: ")
tn.write(b"\\n")
tn.read_until(b"Username: ")
tn.write(b"admin\\n")
tn.read_until(b"Password: ")
tn.write(b"password\\n")
# コマンドの送信
tn.write(b"show config\\n")
# コマンドの結果を取得
output = tn.read_until(b">", timeout=10).decode("utf-8")
# 結果の表示
print(output)
# Telnetセッションの終了
tn.close()
以下のように結果が表示されます。
RTX1210 Rev.14.01.36 (Mon Apr 27 10:41:25 2020)
Copyright (c) 1994-2020 Yamaha Corporation. All Rights Reserved.
To display the software copyright statement, use ’show copyright’ command.
ac:44:f2:xx:xx:xx, ac:44:f2:yy:yy:yy, ac:44:f2:zz:zz:zz
Memory 256Mbytes, 3LAN, 1BRI
上記のプログラム例に含まれている機能やメソッドについて説明しましょう。
telnetlib ライブラリには、Telnetセッションの開始と終了を管理するTelnetクラスが提供されていて、Telnet()をインスタンス化することでセッションを開始できます。
tn = telnetlib.Telnet(host, port)
接続先ホストには、ホスト名でもIPアドレスでも指定することができます。
サーバーからの出力を読み取るには、read_until()や read_all()などのメソッドを使います。
tn.read_until(b"Password: ")
上記は、「Password: 」というバイト文字列を検知するまで読み込みを実行するメソッドです。ここで指定するのはバイト文字列なので、ダブルクォーテーションで括った文字列の前に「b」を付けます。このメソッドでは、与えられたバイト文字列が検知されるか、タイムアウト値が経過するまで読み込みを続けます。
サーバーにコマンドなどのデータを送信するには、write()メソッドを使います。
tn.write(b"show config\n")
コマンドを送信する場合もバイト文字列として指定する必要があります。
今回は、telnetlib ライブラリの説明を行ないました。なお、telnetlib ライブラリはPython3.11から非推奨とすることが提案され、Python3.13から正式に削除される予定です。まだ急ぐ必要はありませんが、将来的なアップデートに備えて、telnetlib3 ライブラリかサードパーティ製ライブラリへの移行も検討しておくとよいでしょう。
次回は、Netmiko ライブラリを取り上げる予定です。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes