前提・実現したいこと
Allied Telesis製のL3スイッチに対してpythonのtelnetlibで操作を試みています。
telnetlibのサンプルを参考に、単純なコマンドを実行して結果を出力してみたところ、read_all()にコマンドの結果が出力されませんでした。
途中経過をread_eager()を使用して出力してみましたが何も表示されないため、正常にコマンドを送信できていないのだと思われます。
何が原因かが全くつかめない状況です。
調査方法など、問題を解消できるヒントをいただけないでしょうか。
発生している問題・エラーメッセージ
スクリプトを実行した結果は以下の通りです。
修正後
shell
1$ python3 telnet.py 2Login: 3Login Success 4b'' 5b'' 6exit
該当のソースコード
python
1# -*- coding:utf-8 -*- 2import getpass 3import sys 4import telnetlib 5 6HOST = "xxx.xxx.xxx.xxx" 7#user = input("Enter your remote account: ") 8#password = getpass.getpass() 9user = b"adminuser" 10password = b"dummypassword" 11 12tn = telnetlib.Telnet(HOST) 13 14tn.read_until(b"login: ") 15print("Login:") 16 17tn.write(user + b"\n") 18if password: 19 tn.read_until(b"Password: ") 20 tn.write(password + b"\n") 21 print("Login Success") 22 23tn.read_until(b'>') 24 25#ページ送り無効 26tn.write(b"terminal length 0\n") 27print(tn.read_eager()) 28 29tn.read_until(b">") 30 31 32#特権モードへ 33tn.write(b"enable\n") 34 35tn.read_until(b"#") 36 37#tn.write(b"show wireless ap status\n") 38tn.write(b"show virsion\n") 39print(tn.read_eager()) 40 41tn.read_until(b"#") 42tn.write(b"exit\n") 43 44print(tn.read_all().decode("ascii")) 45 46tn.close()
ご指摘を受けてソースを修正しました。
・tn.read_eager() が出力されるように修正した
・デバッグ用のメッセージ部分を削除した
ご指摘修正前の出力結果
shell
1~/python$ python3 -V 2Python 3.6.9 3 4~/python$ python3 telnet.py 5Login: 6Login Success 7プロンプト------------------ > 8コマンド実行---------------- terminal length 0 9特権モード------------------ enable 10プロンプト------------------ # 11コマンド実行---------------- show version 12コマンド実行 ----------------------- exit 13reslut----------------------------------------------- 14exit
ご指摘修正前のソース
python
1# -*- coding:utf-8 -*- 2import getpass 3import sys 4import telnetlib 5 6HOST = "xxx.xxx.xxx.xxx" 7#user = input("Enter your remote account: ") 8#password = getpass.getpass() 9user = b"adminuser" 10password = b"dummypassword" 11 12tn = telnetlib.Telnet(HOST) 13 14tn.read_until(b"login: ") 15print("Login:") 16 17tn.write(user + b"\n") 18if password: 19 tn.read_until(b"Password: ") 20 tn.write(password + b"\n") 21 print("Login Success") 22 23tn.read_until(b'>') # コマンドを実行する直前まで読み飛ばす 24print("プロンプト------------------ >") 25 26#ページ送り無効 27tn.write(b"terminal length 0\n") 28tn.read_eager() 29 30tn.read_until(b'>') 31print("コマンド実行---------------- terminal length 0") 32 33 34#特権モードへ 35tn.write(b"enable\n") 36print("特権モード------------------ enable") 37 38tn.read_until(b"#") 39print("プロンプト------------------ #") 40 41#tn.write(b"show wireless ap status\n") 42tn.write(b"show virsion\n") 43tn.read_eager() 44print("コマンド実行---------------- show version") 45 46tn.read_until(b'#') 47tn.write(b"exit\n") 48print("コマンド実行 ----------------------- exit") 49 50#result = tn.read_all().decode("ascii") 51print("reslut-----------------------------------------------") 52print(tn.read_all().decode('ascii')) 53 54tn.close()
試したこと
Windows からTeraTearm や 今回操作しているクライアントPCからTelnetクライアントで接続し、該当のコマンドを操作してみましたが、問題なく操作できました。
操作しているスイッチ固有の問題ではないかと考えていますが、検索して近い事象は見当たりませんでした。
補足情報(FW/ツールのバージョンなど)
Ubuntu 18.04.5 LTS
Python 3.6.9
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。