たそ@ITインフラ初心者

taso@初心者エンジニア

新卒2年目 エンジニアが適当に語るブログてす

Telnetlibを試しに使ってみる。

はじめに

こんにちは たそ(@taso_int)です。
もう2ヶ月で1年が終わっちゃいます。
はやすぎ...
引継ぎアウトプットはしていきたいと思います。
今日はWindows環境でtelnetlibを使いCiscoのrouter上へコマンドを実行します。
本来だとCiscoのSandboxで行いたいのですが、Telnetが使えないので、
手元のルータで実行してみたいと思います。
他に出来そうなのはAWSでのCSR1000vとかですかね。(クラウド料金が多少かかる)

telnetlibとは

telnetlibは、Telnetプロトコルを実装している Telnetクラスを提供します。
Pythonの標準ライブラリであることも特徴の1つかもしれません。

docs.python.org

↑の末尾にサンプルコードがあるのでこちらを参考にして利用していきたいと思います。

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をしています。 実行してみます。

実行結果 f:id:taso_int:20211031221212p:plain ちゃんと実行出来てますね。

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

実行結果 f:id:taso_int:20211031221231p:plain ちゃんと実行出来てますね。
for文を利用して複数機器、複数設定も可能です。

Telnetしか使えないという環境であれば採用されるかも知れませんね。

次はNAPALMというPythonライブラリを使って自動化をしてみたいと思います。
ここまで読んで頂きありがとうございました。