python中telnetlib模組的使用

來源:互聯網
上載者:User

python下能支援telnet的模組telnetlib是內建模組,直接import就可以了,其基本的使用方法也是比較簡單的。

#encoding=utf-8def 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')          # 登入完畢後執行命令    tn.read_until(finish)    for command in commands:        tn.write('%s\n' % command)        #執行完畢後,終止Telnet串連(或輸入exit退出)    tn.read_until(finish)    tn.close() # tn.write('exit\n')if __name__=='__main__': # 配置選項Host = '10.255.254.205' # Telnet伺服器IPusername = 'administrator'   # 登入使用者名稱password = 'dell1950'  # 登入密碼finish = ':~$ '      # 命令提示字元commands = ['echo "test"']do_telnet(Host, username, password, finish, commands)

其中port和timeout是可選的參數,而timeout的只是在初始化socket串連時起作用,而一旦串連成功後如果出現等待那就不會起作用了,比如使用read_until方式擷取內容時返回的內容與指定的內容沒有吻合,那麼就會造成提示等待的情況,這時timeout是不會起作用的,而這個socket串連會一直保持著,永生不死。

那麼如何解決這個問題呢,其實還有一種比較原始的方法,就是使用sleep方法來代替read_until方法,這樣就不會出現種情況,因為到點就會自己輸入,最多也就是最後得不到想要的結果,但是這個方式很不穩定,相容性也不好;另一種方法是使用線程來啟動這個函數,然後對子線程進行逾時設定,這樣就可以達到間接控制這個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的字串是已經解碼的unicode的話,那麼就會報錯的,所以在傳遞發送的字串之前還是先編成utf-8為妥,其它字元不知道支援不,我只試了utf-8,也沒看源碼。

此外,貌似還有一個pexpect的第三方模組可以支援telnet等一系列的協議串連,並支援互動通訊,只是這個模組夠用就沒學習了,這裡先備忘一下。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.