先日、for文を用いた複数台Telnetしログ取得するプログラムについて
上手く動作しませんでしたが、原因が分かり解決できました。
単純に、tn.read_until(b"Password:")から最後のprintまでインデントがずれていただけでした。
下図の状態だと、tn=Telnetlib.Telnet(x)しかfor文の中に入ってないので
1回目は.100代入のみ、2回目.101代入した後にtn.read_until(b"Password:)へ進むので
結果として2回目のログしか出てこなかった。
【先日のコード】
import getpass
import telnetlib
IPlist = ["192.168.0.100","192.168.0.101"]
Password = getpass.getpass()
for x in IPlist:
tn = telnetlib.Telnet(x) #リストの先頭から順番にTelnet
tn.read_until(b"Password:") #「Password:」表示まで待機
tn.write(Password.encode("ascii")+ b"\n") #パスワード入力
#Ciscoコマンド実行
tn.write(b"show clock"+ b"\n") #show clockコマンド実行
tn.write(b"exit"+b"\n") #exitコマンド実行
print(tn.read_all().decode("ascii"))
本日、下図のようなコードに変えて
自動で2台へアクセスしてログ表示させる事できました。
for文に2つの変数を利用。
zip()は、IPリストとPassリストの[0]から値を順番取得して、x,yに代入してます。
x←IPlist y←Passlist
1回目:192.168.0.100にアクセスし、パスワード123を入力。
2回目:192.168.0.101にアクセスし、パスワード666を入力。
ちなみに、for x,y in IPlist,Passlistにすると
1回目:x←192.168.0.100 y←192.168.0.101になってダメでした。。
【変更後のコード】
#import getpass
import telnetlib
IPlist = ["192.168.0.100","192.168.0.101"]
Passlist = ["123","666"]
for x,y in zip(IPlist,Passlist):
tn = telnetlib.Telnet(x) #リストの先頭から順番にTelnet
tn.read_until(b"Password:") #「Password:」表示まで待機
tn.write(y.encode("ascii")+ b"\n") #パスワード入力
#Ciscoコマンド実行
tn.write(b"show clock"+ b"\n") #show clockコマンド実行
tn.write(b"exit"+b"\n") #exitコマンド実行
print(tn.read_all().decode("ascii"))
【実行結果】