最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中telnetlib模塊的使用方式

 更新時(shí)間:2023年11月10日 16:55:30   作者:上帝De助手  
這篇文章主要介紹了python中telnetlib模塊的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python telnetlib模塊的使用

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

#encoding=utf-8
 
def do_telnet(Host, username, password, finish, commands):
    import telnetlib
    '''Telnet遠(yuǎn)程登錄: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__':
	 # 配置選項(xiàng)
	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連接時(shí)起作用,而一旦連接成功后如果出現(xiàn)等待那就不會(huì)起作用了,比如使用read_until方式獲取內(nèi)容時(shí)返回的內(nèi)容與指定的內(nèi)容沒有吻合,那么就會(huì)造成提示等待的情況,這時(shí)timeout是不會(huì)起作用的,而這個(gè)socket連接會(huì)一直保持著,永生不死。

【注:read_until有自己的timeout參數(shù),設(shè)置了會(huì)相應(yīng)的生效】

如何解決這個(gè)問(wèn)題

其實(shí)還有一種比較原始的方法,就是使用sleep方法來(lái)代替read_until方法,這樣就不會(huì)出現(xiàn)種情況,因?yàn)榈近c(diǎn)就會(huì)自己輸入,最多也就是最后得不到想要的結(jié)果,但是這個(gè)方式很不穩(wěn)定,兼容性也不好;

另一種方法是使用線程來(lái)啟動(dòng)這個(gè)函數(shù),然后對(duì)子線程進(jìn)行超時(shí)設(shè)置,這樣就可以達(dá)到間接控制這個(gè)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秒超時(shí)時(shí)間

還有一個(gè)需要注意的是,傳遞給Telnet方法的字符串都會(huì)被解一次碼,所以如果你傳遞過(guò)去需要write的字符串是已經(jīng)解碼的unicode的話,那么就會(huì)報(bào)錯(cuò)的,所以在傳遞發(fā)送的字符串之前還是先編成utf-8為妥,其它字符不知道支持不,我只試了utf-8,也沒看源碼。

此外,貌似還有一個(gè)pexpect的第三方模塊可以支持telnet等一系列的協(xié)議連接,并支持交互式的通信,只是這個(gè)模塊夠用就沒學(xué)習(xí)了,這里先備注一下。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

古浪县| 聂拉木县| 汉阴县| 山阳县| 江门市| 嘉定区| 开化县| 北安市| 盘山县| 贡嘎县| 芜湖市| 台南市| 湘西| 灵丘县| 奉贤区| 津南区| 兴宁市| 云阳县| 秦皇岛市| 泾源县| 岑溪市| 岳阳县| 建瓯市| 碌曲县| 哈巴河县| 鄂尔多斯市| 嫩江县| 习水县| 麻栗坡县| 哈密市| 河曲县| 平乡县| 廉江市| 大姚县| 临泉县| 鹤山市| 嘉鱼县| 林周县| 安仁县| 雷波县| 冕宁县|