Python 中的 Telnetlib 模組
Vaibhav Vaibhav
2022年5月18日
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()
方法讀取所有位元組資料。
作者: Vaibhav Vaibhav