Published 10月 05, 2018 by with 0 comment

01 - Using Telnet in Python - v1



我試著用Python在Cisco設備上做些事.
這個練習是用Python去Telnet登入Cisco設備.
下面程式能做到:
1. Telnet(可選port).
2. 手動輸入Telnet的帳密.
3. 在python中手打要輸入進Cisco 設備的指令

未來會朝下面方向改進:
1. Telnet(可選port).    << Done
2. 登入的設備清單用另外一份文件導入(txt, MS excel, PDF).
3. 可依據設備型號不同, 導入多份設備清單.
4. 設定檔內容用另外一份文件導入(txt, excel, PDF).
5. 可依據設備型號不同, 導入多份設定檔文件.
6. 多線程"同時"登入多台設備.
7. 執行結果用另外一份文件輸出(txt, MS Excel, PDF)

範例檔我是參考:
https://docs.python.org/3.6/library/telnetlib.html#telnet-example

用Notepad++打下列的程式碼,
另存為PY_Telnet_v01.py. 我附上中文注釋方便好讀.
# -*- coding: UTF-8 -*-
# http://juilin77.blogspot.com/
# v20181005
# 下面程式能做到:
# 1. Telnet(可選port).
# 2. 手動輸入Telnet的帳密.
# 3. 在python中手打要輸入進Cisco 設備的指令

# 首先導入下面這兩個模組
import getpass
import telnetlib

# 修改localhost為你要登入主機的IP
# 這邊是加上port
HOST = "192.168.80.174"
PORT = 23
# 需要使用者手動輸入Telnet的Username
user = input("Enter your Telnet account: ")
password = getpass.getpass()

# 自動代入剛才設定好的host IP and port.
tn = telnetlib.Telnet()
tn.open(HOST,PORT)

# 要符合Cisco設備所出現的提示字元, 故改為Username: 
tn.read_until(b"Username: ")
# user會代入剛才手動輸入的帳戶名
tn.write(user.encode('ascii') + b"\n")
if password:
 # 要符合設備所出現的提示字元, Cisco設備會出現Password:
    tn.read_until(b"Password: ")
 # 把剛才手動輸入的密碼帶入
    tn.write(password.encode('ascii') + b"\n")

# 這邊可以寫上我將要在登入設備後去執行的指令
tn.write(b"enable\n")
tn.write(b"cisco123\n")
tn.write(b"configure terminal\n")
tn.write(b"interface loopback 0\n")
tn.write(b"ip address 1.1.1.1 255.255.255.255\n")
tn.write(b"end\n")
tn.write(b"exit\n")

print(tn.read_all().decode('ascii'))

然後我用Web-IOU去建一個測試環境.



以下是預先需要設定的指令:
hostname R01
!
enable secret cisco123
!
no ip domain lookup
!
username cisco password 0 cisco123
!
interface Ethernet0/0
 ip address dhcp
 no shutdown
!
line vty 0 4
 logging synchronous
 login local
 transport input all
!

然後用Windows的cmd, 執行python.
C:\Windows\System32>cd C:\Users\Peter\Desktop\Python\PY_Cisco

C:\Users\Peter\Desktop\Python\PY_Cisco>python PY_Telnet_v01.py
Enter your Telnet account: cisco
Password:

R01>enable
Password:
R01#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
R01(config)#interface loopback 0
R01(config-if)#ip address 1.1.1.1 255.255.255.255
R01(config-if)#end
R01#exit


C:\Users\Peter\Desktop\Python\PY_Cisco>

完成

Check:



最初發表 / 最後更新: 2018.10.05 / 2018.10.08

0 comments:

張貼留言