Python 中的 Telnetlib 模組

Vaibhav Vaibhav 2022年5月18日
Python 中的 Telnetlib 模組

Telnet 協議於 1969 年標準化為 IETF 或 Internet 工程任務組,是一種基於可靠的面向連線的傳輸的客戶端-伺服器協議。

它是在 LAN 或區域網和 Internet 上使用的應用協議。Telnet 協議通過虛擬終端(計算機終端或電子硬體裝置)連線提供雙向(雙向)互動式的面向文字的通訊設施。

在 Telnet 協議中,使用者的資料通過 TCP 或傳輸控制協議分散在一個 8 位位元組導向的資料連線上。Python 程式語言有一個實現 Telnet 協議的 telnetlib 模組。

在本文中,我們將瞭解 telnetlib 庫。

Python 中的 telnetlib

telnetlib 模組有一個 Telnet 類,它包含 Telnet 協議的實際實現。

此類表示到 Telnet 伺服器的設定連線。Telnet 類建構函式接受兩個引數:hostport。預設情況下,hostNoneport0

以下是 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 指令碼將連線到計算機系統中的環回地址 localhost127.0.0.1

接下來,它將接受兩個輸入:使用者名稱和密碼。getpass 模組允許我們在不安全地暴露密碼的情況下輸入密碼。然後,指令碼將使用 Telnet 類連線到主機。

它將在 Login:Password: 字串旁邊寫入使用者名稱和密碼輸入。最後,它將執行 lsexit 命令並使用 read_all() 方法讀取所有位元組資料。

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

相關文章 - Python Module