2014-05-18 38 views
3

我正在寫一個基於「python cmd like」的服務器模塊,它可以通過簡單的「telnet」或「nc」客戶端可以連接到服務器讀取來支持cli交互功能,例如自動完成或命令歷史記錄/在服務器端設置一些東西。如何處理python套接字中的按鍵?

搜索後,有很多模塊可以做「CMD」部分,如Python標準模塊「cmd」或「ipython」甚至vty模擬器,但是,我找不到一個模塊實際上可以直接綁定到套接字檢測諸如「tab」密鑰或「control+c」客戶端的擊鍵。他們大多數只是能夠處理行讀取,不適合自動完成與標籤按下或命令歷史與上/下按。

我認爲這個問題可以被簡化爲:

這有可能讀取插座擊鍵輸入無阻塞,然後處理該鍵輸入值以某種方式服務器端 - 例如ASCII碼+ 1,然後回到套接字顯示在客戶端?

謝謝你的幫助。

+0

搜索後,telnet或ssh不能在純套接字層上工作,而是使用標準協議層,這在之前我被誤解了。 rfc855和rfc4253定義了telnet/ssh的工作方式,只是對於有人同樣的擔心,在我的情況下,我需要使用我自己的twisted或write layer。 非常感謝漢斯指出。 –

回答

1

你想要什麼是不可能的。正如你所說,你想寫一個基於cmd像服務器的套接字。服務器將打開一個套接字並偵聽來自客戶端的數據。現在可以通過字符讀取套接字輸入字符(這與不阻塞的BTW不一樣),但這不會對您有所幫助。

由客戶端程序決定如何以及何時發送數據。所以如果客戶端程序決定「吃」選項卡並控制角色,那麼你根本就看不到它們。所以如果你想逐個處理鍵擊,你還需要一個客戶端應用程序。

+0

我明白了,那麼,通用系統如何處理telnet/ssh訪問呢?例如,要在Windows中使用「telnet」遠程登錄一個linux機器,shell可以進行密鑰檢測? –

+0

telnet和ssh同時擁有客戶端和服務器端。個人擊鍵被捕獲在客戶端中,然後發送到服務器。所以,要做你想做的事,你需要一個客戶端應用程序。你可能試圖做的只是使用'telnet'作爲你的客戶端應用程序,並將telnet連接到你的套接字服務器。 –