はじめに
こんにちは たそ(@taso_int)です。
もう2ヶ月で1年が終わっちゃいます。
はやすぎ...
引継ぎアウトプットはしていきたいと思います。
今日はWindows環境でtelnetlibを使いCiscoのrouter上へコマンドを実行します。
本来だとCiscoのSandboxで行いたいのですが、Telnetが使えないので、
手元のルータで実行してみたいと思います。
他に出来そうなのはAWSでのCSR1000vとかですかね。(クラウド料金が多少かかる)
telnetlibとは
telnetlibは、Telnetプロトコルを実装している Telnetクラスを提供します。
Pythonの標準ライブラリであることも特徴の1つかもしれません。
↑の末尾にサンプルコードがあるのでこちらを参考にして利用していきたいと思います。
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'))
環境について
今回は手元のルータ(cisco 1841)を利用したいと思います。
telnetを使える状態にします。
ユーザーはtasoでパスワードはciscoにします。
telnetlibで接続してみる
こちらがコードになります。
import getpass import telnetlib #対象のルータのIPアドレス HOST = "192.168.1.254" #ユーザー名入力式にしてる user = 'taso' でも可 user = input("Enter your telnet username: ") #パスワード入力式 見れないようになってる password = 'cisco' でも可 password = getpass.getpass() tn = telnetlib.Telnet(HOST) #telnetの接続認証関係 tn.read_until(b"Username: ") tn.write(user.encode('ascii') + b"\n") if password: tn.read_until(b"Password: ") tn.write(password.encode('ascii') + b"\n") #コマンド内容今回はユーザーの設定が特権ユーザーからなのでenable省略 tn.write(b"show ip int brief\n") tn.write(b"exit\n") print(tn.read_all().decode('ascii'))
telnetで入り、enableをしてshow ip int briefをしています。 実行してみます。
実行結果 ちゃんと実行出来てますね。
telnetlibで設定を入れてみる
次にloopbackインタフェースを追加してみたいと思います。
import getpass import telnetlib #対象のルータのIPアドレス HOST = "192.168.1.254" #ユーザー名入力式にしてる user = 'taso' でも可 user = input("Enter your telnet username: ") #パスワード入力式 見れないようになってる password = 'cisco' でも可 password = getpass.getpass() tn = telnetlib.Telnet(HOST) #telnetの接続認証関係 tn.read_until(b"Username: ") tn.write(user.encode('ascii') + b"\n") if password: tn.read_until(b"Password: ") tn.write(password.encode('ascii') + b"\n") #コマンド内容 #事前と事後で確認 tn.write(b"show ip int brief\n") tn.write(b"conf t\n") tn.write(b"int loopback 100\n") tn.write(b"ip add 100.100.100.100 255.255.255.255\n") tn.write(b"end\n") tn.write(b"show ip int brief\n") tn.write(b"exit\n") print(tn.read_all().decode('ascii'))
実行結果
ちゃんと実行出来てますね。
for文を利用して複数機器、複数設定も可能です。
Telnetしか使えないという環境であれば採用されるかも知れませんね。
Telnet pic.twitter.com/wMLpwh7Hiu
— うさぎエンジニア (@usagi_automate) 2021年10月26日
次はNAPALMというPythonライブラリを使って自動化をしてみたいと思います。
ここまで読んで頂きありがとうございました。