python中telnetlib模塊的使用

python下能支持telnet的模塊telnetlib是內(nèi)置模塊,直接import就可以了,其基本的使用方法也是比較簡單的。


[python]view plaincopy


#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?commandin?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連接會一直保持著,永生不死。


那么如何解決這個問題呢,其實還有一種比較原始的方法,就是使用sleep方法來代替read_until方法,這樣就不會出現(xiàn)種情況,因為到點就會自己輸入,最多也就是最后得不到想要的結(jié)果,但是這個方式很不穩(wěn)定,兼容性也不好;另一種方法是使用線程來啟動這個函數(shù),然后對子線程進行超時設(shè)置,這樣就可以達到間接控制這個telnet連接的目的了。


[python]view plaincopy


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為妥,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容