Python網(wǎng)絡(luò)設(shè)備腳本中經(jīng)常使用的connecthandler和telnetlib是什么意思?
你好,這里是網(wǎng)絡(luò)技術(shù)聯(lián)盟站。
在昨天的文章中,有小伙伴提到對這兩天瑞哥提供的Python腳本中涉及的connecthandler和telnetlib兩個(gè)模塊不是太了解,想要學(xué)習(xí)一下:

今天瑞哥就安排上!
其實(shí)這兩個(gè)模塊是Python與網(wǎng)絡(luò)設(shè)備交互最常用的兩個(gè)模塊,當(dāng)然了,還有其他的哈,那么今天我們就針對性的講一下吧,希望不僅僅是“死魚非命”這位小伙伴能夠理解,在看的各位朋友都能理解兩個(gè)模塊該如何使用。
讓我們直接開始!
一、ConnectHandler
Python的Paramiko庫提供了一個(gè)叫做ConnectHandler的模塊,可以簡化SSH連接和命令執(zhí)行的代碼,使得我們能夠更加方便地與網(wǎng)絡(luò)設(shè)備交互。
1.1 ConnectHandler模塊介紹
ConnectHandler模塊是Paramiko庫提供的一個(gè)高級模塊,它封裝了SSH連接、命令執(zhí)行和輸出解析等功能,使得我們能夠更加方便地與SSH服務(wù)器進(jìn)行交互。
通過ConnectHandler模塊,我們可以:
建立SSH連接
發(fā)送命令
獲取輸出結(jié)果
關(guān)閉SSH連接
ConnectHandler模塊支持的設(shè)備類型非常豐富,包括華為、H3C、銳捷、Cisco、Juniper、HP、Fortinet等眾多品牌的設(shè)備。
1.2 使用示例
下面我們來看一個(gè)簡單的使用示例,該示例使用ConnectHandler模塊連接到一個(gè)Cisco路由器,并執(zhí)行一個(gè)命令:
from?netmiko?import?ConnectHandler
#?定義設(shè)備信息
device?=?{
????'device_type':?'cisco_ios',
????'ip':?'192.168.1.1',
????'username':?'username',
????'password':?'password'
}
#?建立SSH連接
with?ConnectHandler(**device)?as?conn:
????#?發(fā)送命令
????output?=?conn.send_command('show?ip?interface?brief')
#?輸出結(jié)果
print(output)
在上面的代碼中,我們首先定義了一個(gè)字典類型的device變量,其中包含了連接設(shè)備的必要信息,比如設(shè)備類型、IP地址、用戶名和密碼等。接著,我們使用ConnectHandler模塊建立SSH連接,并使用with語句來確保連接被正確關(guān)閉。在連接建立后,我們發(fā)送了一個(gè)命令show ip interface brief
,并使用send_command方法來執(zhí)行該命令并獲取輸出結(jié)果。最后,我們輸出了命令的輸出結(jié)果。
除了使用send_command方法來發(fā)送單個(gè)命令外,ConnectHandler模塊還提供了一系列其他方法,如send_config_set、send_config_from_file等,可以用于發(fā)送多個(gè)配置命令或從文件中加載配置命令。
1.3 小結(jié)
ConnectHandler模塊是Python Paramiko庫提供的一個(gè)高級模塊,它封裝了SSH連接、命令執(zhí)行和輸出解析等功能,使得我們能夠更加方便地與SSH服務(wù)器進(jìn)行交互。在使用ConnectHandler模塊時(shí),我們只需要提供設(shè)備的必要信息,就可以通過簡單的代碼來實(shí)現(xiàn)SSH連接和命令執(zhí)行。這大大簡化了SSH交互的代碼編寫,提高了我們的工作效率。
二、telnetlib
Python的telnetlib庫提供了一個(gè)telnet客戶端,可以用于與telnet服務(wù)器進(jìn)行交互。
2.1 telnetlib庫介紹
telnetlib庫是Python標(biāo)準(zhǔn)庫中提供的一個(gè)模塊,它提供了一個(gè)telnet客戶端,可以用于與telnet服務(wù)器進(jìn)行交互。
通過telnetlib庫,我們可以:
建立telnet連接
發(fā)送命令
獲取輸出結(jié)果
關(guān)閉telnet連接
2.2 使用示例
下面我們來看一個(gè)簡單的使用示例,該示例使用telnetlib庫連接到一個(gè)telnet服務(wù)器,并執(zhí)行一個(gè)命令:
import?telnetlib
#?定義設(shè)備信息
host?=?'192.168.1.1'
username?=?'username'
password?=?'password'
#?建立telnet連接
tn?=?telnetlib.Telnet(host)
#?登錄
tn.read_until(b'Username:?')
tn.write(username.encode('ascii')?+?b"\n")
tn.read_until(b'Password:?')
tn.write(password.encode('ascii')?+?b"\n")
#?發(fā)送命令
tn.write(b"show?ip?interface?brief\n")
output?=?tn.read_all().decode('ascii')
#?關(guān)閉連接
tn.close()
#?輸出結(jié)果
print(output)
在上面的代碼中,我們首先定義了一些必要的設(shè)備信息,如telnet服務(wù)器的IP地址、用戶名和密碼等。接著,我們使用telnetlib.Telnet類建立telnet連接,并使用read_until方法和write方法登錄到服務(wù)器。在登錄后,我們使用write方法發(fā)送了一個(gè)命令show ip interface brief
,并使用read_all方法獲取輸出結(jié)果。最后,我們關(guān)閉了telnet連接,并輸出了命令的輸出結(jié)果。
除了使用read_all方法來獲取輸出結(jié)果外,telnetlib庫還提供了一系列其他方法,如read_until、read_eager、read_some等,可以用于讀取不同形式的輸出。
2.3 小結(jié)
telnetlib庫是Python標(biāo)準(zhǔn)庫中提供的一個(gè)模塊,它提供了一個(gè)telnet客戶端,可以用于與telnet服務(wù)器進(jìn)行交互。通過telnetlib庫,我們可以實(shí)現(xiàn)telnet連接的建立、命令的發(fā)送和輸出結(jié)果的獲取等功能。在使用telnetlib庫時(shí),我們需要使用telnetlib.Telnet類來建立連接,并使用相應(yīng)的方法來執(zhí)行操作和獲取輸出結(jié)果。
三、總結(jié)
本文給大家介紹了兩個(gè)重要的知識點(diǎn):
ConnectHandler
telnetlib
ConnectHandler和telnetlib在Python體系的范圍中是有差距的:

可以看到ConnectHandler屬于Paramiko庫的一個(gè)高級模塊,而telnetlib是Python標(biāo)準(zhǔn)庫中提供的一個(gè)模塊,這個(gè)我們需要注意一下。
怎么樣,這下理解了嗎?