91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中利用Telnet實現自動連接檢測密碼

發布時間:2021-04-15 18:07:02 來源:億速云 閱讀:170 作者:Leah 欄目:開發技術

這篇文章給大家介紹怎么在Python中利用Telnet實現自動連接檢測密碼,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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


def do_telnet(Host, Port, username, password, finish):
    # 連接Telnet服務器
    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')

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


if __name__ == '__main__':
    Host = input("IP:")  # Telnet服務器IP
    Port = input("Port:")  # Telnet服務器端口
    username = 'root'  # 登錄用戶名
    finish = 'incorrect'  # 密碼錯誤提示
    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,內容例如:

root  
admin  
12345  
888888

輸出如下:

怎么在Python中利用Telnet實現自動連接檢測密碼

注:我這邊測試的目標主機是嵌入式linux系統,用戶名是root,密碼錯誤返回的是incorrect提示。你可能要根據目標系統不同修改用戶名和錯誤提示。

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

在網上還有一個叫 Pexpect 它好象功能強大,它支持多種協議,它的主頁就建議使用 Pexpect 來下載它的文檔。不過因為網絡不太好就沒有下來,不知道支不支持 Telnet 協議。

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

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

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

import threading  

th2 = threading.Thread(target=do_telnet, args=(host.encode('utf-8'), user.encode('utf-8'), passwd.encode('utf-8'), finish.encode('utf-8'), commands))  
th2.start()  
th2.join(20)  ##20秒超時時間

關于怎么在Python中利用Telnet實現自動連接檢測密碼就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳东县| 灵川县| 新河县| 宜章县| 从化市| 中牟县| 静海县| 信阳市| 晋江市| 萨迦县| 潜山县| 巴中市| 沙河市| 济宁市| 万荣县| 辽中县| 黄山市| 灵台县| 横山县| 名山县| 内江市| 龙山县| 南汇区| 临西县| 潞西市| 沙坪坝区| 九龙坡区| 监利县| 海兴县| 道真| 蒙阴县| 天津市| 长宁县| 永新县| 甘谷县| 双峰县| 青河县| 新野县| 夏河县| 读书| 和龙市|