Python 中的 Telnetlib 模組
Vaibhav Vaibhav
2022年5月18日
Python
Python Module
Telnet 協議於 1969 年標準化為 IETF 或 Internet 工程任務組,是一種基於可靠的面向連線的傳輸的客戶端-伺服器協議。
它是在 LAN 或區域網和 Internet 上使用的應用協議。Telnet 協議通過虛擬終端(計算機終端或電子硬體裝置)連線提供雙向(雙向)互動式的面向文字的通訊設施。
在 Telnet 協議中,使用者的資料通過 TCP 或傳輸控制協議分散在一個 8 位位元組導向的資料連線上。Python 程式語言有一個實現 Telnet 協議的 telnetlib 模組。
在本文中,我們將瞭解 telnetlib 庫。
Python 中的 telnetlib 庫
telnetlib 模組有一個 Telnet 類,它包含 Telnet 協議的實際實現。
此類表示到 Telnet 伺服器的設定連線。Telnet 類建構函式接受兩個引數:host 和 port。預設情況下,host 是 None,port 是 0。
以下是 Telnet 類的簽名。
class telnetlib.Telnet(host=None, port=0)
Telnet 類具有以下方法。
read_until(expected, timeout = None)- 讀取直到找到給定的位元組字串expected或直到timeout秒數過去。read_all()- 以位元組形式讀取所有資料,直到找到 EOF 或 End of File。它也會阻塞,直到連線關閉。read_some()- 讀取至少1個位元組的資料,直到遇到 EOF。read_very_eager()- 在不阻塞輸入輸出或 I/O 操作的情況下,讀取所有可能的內容。read_eager()- 讀取所有現成的資料。read_lazy()- 處理並返回佇列中已經存在的資料。read_very_lazy()- 返回佇列中可用的任何資料。read_sb_data()- 返回在 SB/SE 對或子選項開始/子選項結束之間收集的資料。open(host, post = 0)- 使用預設 Telnet 協議埠23連線到指定主機。這裡,0指向埠23。msg(msg, *args)- 當除錯級別大於0時列印除錯訊息。所有額外的引數都使用標準字串格式化運算子或%替換訊息。set_debuglevel(debuglevel)- 設定除錯級別。close()- 關閉與 Telnet 伺服器的連線。get_socket()- 返回內部使用的套接字物件。fileno()- 返回內部使用的套接字物件的檔案描述符。write(buffer)- 將位元組字串寫入連線的套接字。interact()- 這是一個模擬或匹配一個非常愚蠢的 Telnet 客戶端的互動式函式。mt_interact()- 一個多執行緒互動函式。expect(list, timeout = None)- 讀取資料,直到正規表示式列表中的一個正規表示式匹配。set_option_negotiation_callback(callback)- 每次在輸入資料流上讀取 telnet 選項時,都會使用以下引數呼叫此回撥函式:callback(telnet socket, command (DO/DONT/WILL/WONT), option)。telnetlib模組之後不會執行其他操作。
例子
下面是一個簡單的示例,它試圖描述 telnetlib 模組的用法。請參考以下 Python 程式碼。
import getpass
import telnetlib
host = "127.0.0.1"
user = input("Username: ")
password = getpass.getpass()
tn = telnetlib.Telnet(host)
tn.read_until(b"Login: ")
tn.write(user.encode("ascii") + b"\n")
if password:
tn.read_until(b"Password: ")
tn.write(password.encode("ascii") + b"\n")
tn.write(b"ls\n")
tn.write(b"exit\n")
print(tn.read_all().decode("ascii"))
上面的 Python 指令碼將連線到計算機系統中的環回地址 localhost 或 127.0.0.1。
接下來,它將接受兩個輸入:使用者名稱和密碼。getpass 模組允許我們在不安全地暴露密碼的情況下輸入密碼。然後,指令碼將使用 Telnet 類連線到主機。
它將在 Login: 和 Password: 字串旁邊寫入使用者名稱和密碼輸入。最後,它將執行 ls 和 exit 命令並使用 read_all() 方法讀取所有位元組資料。
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Vaibhav Vaibhav
