python中telnetlib模塊的使用方式
python telnetlib模塊的使用
python下能支持telnet的模塊telnetlib是內置模塊,直接import就可以了,其基本的使用方法也是比較簡單的。
#encoding=utf-8 def do_telnet(Host, username, password, finish, commands): import telnetlib '''Telnet遠程登錄:Windows客戶端連接Linux服務器''' # 連接Telnet服務器 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服務器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方式獲取內容時返回的內容與指定的內容沒有吻合,那么就會造成提示等待的情況,這時timeout是不會起作用的,而這個socket連接會一直保持著,永生不死。
【注:read_until有自己的timeout參數(shù),設置了會相應的生效】
如何解決這個問題
其實還有一種比較原始的方法,就是使用sleep方法來代替read_until方法,這樣就不會出現(xiàn)種情況,因為到點就會自己輸入,最多也就是最后得不到想要的結果,但是這個方式很不穩(wěn)定,兼容性也不好;
另一種方法是使用線程來啟動這個函數(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é)議連接,并支持交互式的通信,只是這個模塊夠用就沒學習了,這里先備注一下。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于tensorflow for循環(huán) while循環(huán)案例
這篇文章主要介紹了基于tensorflow for循環(huán) while循環(huán)案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python 循環(huán)while和for in簡單實例
下面小編就為大家?guī)硪黄猵ython 循環(huán)while和for in簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08pytorch中的hook機制register_forward_hook
這篇文章主要介紹了pytorch中的hook機制register_forward_hook,手動在forward之前注冊hook,hook在forward執(zhí)行以后被自動執(zhí)行,下面詳細的內容介紹,需要的小伙伴可以參考一下2022-03-03關于Python 實現(xiàn)tuple和list的轉換問題
這篇文章主要介紹了Python 實現(xiàn)tuple和list的轉換,文中介紹了list(列表)和tuple(元組)共同點和區(qū)別,結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-05-05python腳本請求數(shù)量達到上限,http請求重試問題
這篇文章主要介紹了python腳本請求數(shù)量達到上限,http請求重試問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06