python中telnetlib模塊的使用方式
python telnetlib模塊的使用
python下能支持telnet的模塊telnetlib是內(nèi)置模塊,直接import就可以了,其基本的使用方法也是比較簡單的。
#encoding=utf-8
def do_telnet(Host, username, password, finish, commands):
import telnetlib
'''Telnet遠程登錄:Windows客戶端連接Linux服務(wù)器'''
# 連接Telnet服務(wù)器
tn = telnetlib.Telnet(Host, port=23, timeout=10)
tn.set_debuglevel(2)
# 輸入登錄用戶名
tn.read_until('login: ')
tn.write(username + '\n')
# 輸入登錄密碼
tn.read_until('password: ')
tn.write(password + '\n')
# 登錄完畢后執(zhí)行命令
tn.read_until(finish)
for command in commands:
tn.write('%s\n' % command)
#執(zhí)行完畢后,終止Telnet連接(或輸入exit退出)
tn.read_until(finish)
tn.close() # tn.write('exit\n')
if __name__=='__main__':
# 配置選項
Host = '10.255.254.205' # Telnet服務(wù)器IP
username = 'administrator' # 登錄用戶名
password = 'dell1950' # 登錄密碼
finish = ':~$ ' # 命令提示符
commands = ['echo "test"']
do_telnet(Host, username, password, finish, commands)其中port和timeout是可選的參數(shù),而timeout的只是在初始化socket連接時起作用,而一旦連接成功后如果出現(xiàn)等待那就不會起作用了,比如使用read_until方式獲取內(nèi)容時返回的內(nèi)容與指定的內(nèi)容沒有吻合,那么就會造成提示等待的情況,這時timeout是不會起作用的,而這個socket連接會一直保持著,永生不死。
【注:read_until有自己的timeout參數(shù),設(shè)置了會相應(yīng)的生效】
如何解決這個問題
其實還有一種比較原始的方法,就是使用sleep方法來代替read_until方法,這樣就不會出現(xiàn)種情況,因為到點就會自己輸入,最多也就是最后得不到想要的結(jié)果,但是這個方式很不穩(wěn)定,兼容性也不好;
另一種方法是使用線程來啟動這個函數(shù),然后對子線程進行超時設(shè)置,這樣就可以達到間接控制這個telnet連接的目的了。
import threading
pars = replace_db_keyworlds(vars_dict, pars)
configs = pars.split(r'@')
host = configs[0].encode()
user = configs[1]
passwd = configs[2]
finish = configs[3]
commands = configs[4].split(r'\n')
th1 = threading.Thread(target=do_telnet, args=(host.encode('utf-8'), user.encode('utf-8'), passwd.encode('utf-8'), finish.encode('utf-8'), commands))
th1.start()
th1.join(20) ##20秒超時時間還有一個需要注意的是,傳遞給Telnet方法的字符串都會被解一次碼,所以如果你傳遞過去需要write的字符串是已經(jīng)解碼的unicode的話,那么就會報錯的,所以在傳遞發(fā)送的字符串之前還是先編成utf-8為妥,其它字符不知道支持不,我只試了utf-8,也沒看源碼。
此外,貌似還有一個pexpect的第三方模塊可以支持telnet等一系列的協(xié)議連接,并支持交互式的通信,只是這個模塊夠用就沒學(xué)習(xí)了,這里先備注一下。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python爬蟲學(xué)習(xí)筆記--BeautifulSoup4庫的使用詳解
這篇文章主要介紹了Python中使用Beautiful Soup庫的超詳細教程,示例代碼基于Python2.x版本,極力推薦!需要的朋友可以參考下2021-08-08
python數(shù)據(jù)寫入列表并導(dǎo)出折線圖
這篇文章主要介紹了python數(shù)據(jù)寫入列表并導(dǎo)出折線圖,文章以舉例展開對文章主題的介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-01-01
Python利用海龜畫圖turtle庫做一個籃球比賽計時畫面示例代碼
這篇文章主要介紹了Python利用海龜畫圖turtle庫做一個籃球比賽計時畫面的相關(guān)資料,文中通過代碼介紹的非常詳細,代碼實現(xiàn)了一個基本的計時器功能,需要的朋友可以參考下2024-12-12

