IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Pythonでネットワーク自動化をしよう

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第18回 telnetlibライブラリ (小澤昌樹) 2024年2月

1. はじめに

みなさん、こんにちは。

前回に続き、ネットワーク自動化に活用できるPythonのモジュールやライブラリを紹介していきましょう。前回は、subprocess ライブラリに焦点を当てましたが、今回はネットワークデバイスとの対話に使えるPythonのモジュールである telnetlib ライブラリにスポットを当てます。

2. 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
3. telnetlibライブラリのメソッド

上記のプログラム例に含まれている機能やメソッドについて説明しましょう。

サーバーへの接続

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

コマンドを送信する場合もバイト文字列として指定する必要があります。

4. まとめ

今回は、telnetlib ライブラリの説明を行ないました。なお、telnetlib ライブラリはPython3.11から非推奨とすることが提案され、Python3.13から正式に削除される予定です。まだ急ぐ必要はありませんが、将来的なアップデートに備えて、telnetlib3 ライブラリかサードパーティ製ライブラリへの移行も検討しておくとよいでしょう。

次回は、Netmiko ライブラリを取り上げる予定です。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes