telnetlib 是 Python 標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,它提供了 Telnet 協(xié)議的客戶端功能。使用 telnetlib 模塊,我們可以在 Python 中編寫(xiě)腳本來(lái)自動(dòng)化 Telnet 會(huì)話,執(zhí)行命令以及收集輸出。
本文將介紹 telnetlib 模塊的基本使用以及一些示例。
基本用法
在使用 telnetlib 時(shí),需要先創(chuàng)建一個(gè) Telnet 對(duì)象,然后使用該對(duì)象進(jìn)行 Telnet 會(huì)話。可以使用以下代碼創(chuàng)建一個(gè) Telnet 對(duì)象:
importtelnetlib tn=telnetlib.Telnet(host,port)
其中 host 是 Telnet 服務(wù)器的主機(jī)名或 IP 地址,port 是 Telnet 服務(wù)器的端口號(hào)。
創(chuàng)建 Telnet 對(duì)象后,可以使用 read_until() 方法等待服務(wù)器發(fā)送的數(shù)據(jù)。可以使用以下代碼等待 Telnet 服務(wù)器發(fā)送的數(shù)據(jù):
tn.read_until(b"login:")
其中 b"login: " 是一個(gè)字節(jié)數(shù)組,用于指定需要等待的字符串。
可以使用 write() 方法向 Telnet 服務(wù)器發(fā)送數(shù)據(jù)。例如,可以使用以下代碼向 Telnet 服務(wù)器發(fā)送用戶名和密碼:
tn.write(username.encode('ascii')+b" ") tn.read_until(b"Password:") tn.write(password.encode('ascii')+b" ")
在登錄到 Telnet 服務(wù)器后,可以使用 write() 方法執(zhí)行命令并收集輸出。例如,可以使用以下代碼執(zhí)行 ls 命令并收集輸出:
tn.write(b"ls ") output=tn.read_all().decode('ascii') print(output)
以上是 telnetlib 模塊的基本用法,接下來(lái)我們將看一些示例。
示例
示例:Telnet 登錄并執(zhí)行命令
以下示例演示如何使用 telnetlib 模塊登錄到 Telnet 服務(wù)器并執(zhí)行命令:
importtelnetlib #配置Telnet服務(wù)器的IP地址和端口號(hào) HOST="localhost" PORT=23 #配置Telnet登錄信息 username="admin" password="password" #創(chuàng)建Telnet對(duì)象 tn=telnetlib.Telnet(HOST,PORT) #等待服務(wù)器發(fā)送登錄提示 tn.read_until(b"login:") #發(fā)送用戶名 tn.write(username.encode('ascii')+b" ") #等待服務(wù)器發(fā)送密碼提示 tn.read_until(b"Password:") #發(fā)送密碼 tn.write(password.encode('ascii')+b" ") #執(zhí)行命令并收集輸出 tn.write(b"ls ") output=tn.read_all().decode('ascii') print(output) #關(guān)閉Telnet連接 tn.close()
下面是Python telnetlib框架的更多例子:
1. 實(shí)現(xiàn)交互式命令行
telnetlib可以實(shí)現(xiàn)交互式的命令行操作。下面是一個(gè)簡(jiǎn)單的示例,演示了如何連接到遠(yuǎn)程設(shè)備,執(zhí)行命令并獲取輸出:
importtelnetlib HOST="192.168.0.1" user="admin" password="password" tn=telnetlib.Telnet(HOST) tn.read_until(b"login:") tn.write(user.encode('ascii')+b" ") tn.read_until(b"Password:") tn.write(password.encode('ascii')+b" ") tn.write(b"enable ") tn.read_until(b"Password:") tn.write(password.encode('ascii')+b" ") tn.write(b"showinterfaces ") output=tn.read_all().decode('ascii') print(output)
在這個(gè)例子中,我們首先連接到遠(yuǎn)程設(shè)備,然后輸入用戶名和密碼以登錄。接著,我們輸入enable命令,再次輸入密碼以獲取管理員權(quán)限。最后,我們執(zhí)行show interfaces命令,并將輸出打印出來(lái)。
2. 實(shí)現(xiàn)交互式配置
除了執(zhí)行命令,我們也可以使用telnetlib實(shí)現(xiàn)交互式的配置。下面是一個(gè)簡(jiǎn)單的示例,演示了如何連接到遠(yuǎn)程設(shè)備,進(jìn)入配置模式并配置接口:
importtelnetlib HOST="192.168.0.1" user="admin" password="password" tn=telnetlib.Telnet(HOST) tn.read_until(b"login:") tn.write(user.encode('ascii')+b" ") tn.read_until(b"Password:") tn.write(password.encode('ascii')+b" ") tn.write(b"enable ") tn.read_until(b"Password:") tn.write(password.encode('ascii')+b" ") tn.write(b"configureterminal ") tn.write(b"interfaceethernet1/1 ") tn.write(b"descriptionLinktoSwitchA ") tn.write(b"noshutdown ") tn.write(b"exit ") tn.write(b"exit ") output=tn.read_all().decode('ascii') print(output)
在這個(gè)例子中,我們首先連接到遠(yuǎn)程設(shè)備,然后輸入用戶名和密碼以登錄。接著,我們輸入enable命令,再次輸入密碼以獲取管理員權(quán)限。然后,我們輸入configure terminal命令進(jìn)入配置模式,并使用interface ethernet 1/1命令進(jìn)入以太網(wǎng)接口1/1的配置界面。在這個(gè)界面中,我們使用description命令配置了接口的描述,使用no shutdown命令開(kāi)啟了接口,并使用exit命令退出了接口配置界面和配置模式。最后,我們將所有輸出打印出來(lái)。
審核編輯:湯梓紅
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9287瀏覽量
85847 -
TELNET
+關(guān)注
關(guān)注
0文章
17瀏覽量
10792 -
python
+關(guān)注
關(guān)注
56文章
4806瀏覽量
84935 -
標(biāo)準(zhǔn)庫(kù)
+關(guān)注
關(guān)注
0文章
31瀏覽量
7505 -
腳本
+關(guān)注
關(guān)注
1文章
391瀏覽量
14916
原文標(biāo)題:網(wǎng)絡(luò)工程師學(xué)Python-Telnet協(xié)議telnetlib模塊
文章出處:【微信號(hào):網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號(hào):網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論