運行環境:
物理機:win10 1903
網絡設備:EVE-NG模擬器上運行思科三層路由器
網絡設備OS版本:cisco ios(versions 15.6)
python環境:pycharm 3.3
python解析器版本:3.7
實驗目的:給R4的lo1口配置地址:2.2.2.2/24
實驗括撲:
- 因為我的環境較為特殊,Telnetlib要接入的是eve中的虛擬接口,而且eve中的端口都是默認打開的,並且不需要輸入賬號與密碼,也就是說,只要是通過web頁面點擊設備進行訪問,全部都是免Telnet、ssh就能夠進入到管理界面(實際上通過web管理下,eve是通過telnet向設備發送命令)。那這樣的話就沒有辦法去模擬真機環境下的Telnet和SSH,所以我就又想了個辦法,那我用python先登錄到R3,然后在R3上去登錄其他路由器(比如R4),這樣不也可以嗎?下面我將這樣來演示,先登錄到R3,再從R3上去Telnet R4。退出也是通過捕捉關鍵字來實現退出。
- 因為做這個實驗時間本人環境等問題還沒有解決,后面想到了更好的方法將在后面展示,本篇文章將對所存在問題進行詳細描述;本人寫作能力有限,而且還是新手、文章可能難以理解,望各位見諒。
- 下面的每台三層交換機都默認配置了Telnet和SSH,Telnet用戶名是python,密碼是123,SSH用戶名是ccie,密碼是cisco
以下代碼參考《網絡工程師的python之路》這本書:
import telnetlib #導入Telnetlib模塊
host = "192.168.142.128"
user = "python" #定義四個變量,分別是地址、用戶名、密碼、和退出字符串
password = "123"
enter = "enter"
exit_telnet = "exit"
tn = telnetlib.Telnet(host,32771) #賦值tn,嘗試以Telnet登錄到192.168.142.128,32771。
tn.write(b"\r\n") #輸入換行符,等於輸入enter鍵。進入用戶模式
tn.write(b"en\n") #進入R3的特權模式
tn.read_until(b"Password: ") #用read_until檢測關鍵字:Password
tn.write(password.encode('ascii') + b"\n") #當符合關鍵字條件之后,輸入用戶名,並用\n換行
tn.write(b"telnet 192.168.2.12\n") #利用python將Telnet到R4的命令發送給R3
tn.read_until(b"Username: ") #登錄到R4后,會提示Username,跟前面一樣,讀取關鍵字
tn.write(user.encode('ascii') + b"\n")
tn.read_until(b"Password: ") #登錄到R4后,讀取關鍵字,並輸入密碼
tn.write(password.encode('ascii') + b"\n")
# ----------------------------------------下面的配置都是網工爛熟於心的配置了,這里就不再介紹---------
tn.write(b"en\n")
tn.write(b"123\n")
tn.write(b"conf t\n")
tn.write(b"int lo1\n")
tn.write(b"ip add 2.2.2.2 255.255.255.0\n")
tn.write(b"do sh ip int br\n")
tn.write(b"end\n")
tn.write(b"exit\n")
tn.read_until(b"[Connection to") #檢測是否退出了R4的Telnet,這里只需檢測是否為[Connection開頭即可。
tn.write(exit_telnet.encode('ascii') + b"\n") #當檢測到已經退出R4的Telnet,說明已經退回到R3的特權模式。這里再次輸入exit退出。
tn.close()
print(tn.read_all().decode('ascii')) #用read_all方法將登錄SW1后執行命令的所有過程都記錄下來,並通過print打印出來
#我覺得最有可能的是,要進行打印的字符串pycharm無法識別,導致只顯示一個1.
最終效果: