2009-11-27 54 views
1

我想添加命令行界面支持到服務器程序。有沒有開源的命令行庫?

所以每次我想檢查服務器的狀態時,我都可以telnet到服務器的控制端口 並輸入命令來檢查服務器的狀態。

有沒有開源的庫實現這樣的功能,所以我不需要從頭開始寫它?

更進一步,如果庫可以提供更多的功能,如Cisco的命令行界面(tab鍵提示,命令查詢,vi模式,或甚至基於碼元指令),這是將是巨大的。

回答

5

libcli聽起來像正是你所尋找的東西。它包括類似Cisco的功能和一個telnet服務器。我從來沒有用過它,但是當我在尋找類似的CLI時遇到了它。

1

readline(3)你在找什麼呢?

readline將從終端讀取一行並返回它,使用prompt作爲提示。如果 提示是NULL或空字符串,則不會發出提示。返回的行與malloc(3)一起分配爲 ;呼叫者必須在完成時釋放它。返回的行已刪除最後的新行,因此只有行的文本保留。

從這個問題是不清楚,如果你正在尋求實現用戶交互的連接。這個答案,UI部分。

+0

我想這個作爲運行服務器程序的子線程,並通過套接字通信的客戶端。所以我可以隨時隨地監控服務器程序的狀態。 Readline是一個輸入處理庫,但我想我可能需要其他套接字服務器/命令處理機制。 –

2

可以使用socket圖書館聽一個TCP端口,接收有命令和輸出回到自己的地位。沒有太多的代碼需要這樣做;一個例子可以在這裏找到:http://www.paulgriffiths.net/program/c/echoserv.php

(示例程序只是返回已發送的命令。顯然,你會希望有更多特定於應用程序的東西來代替Writeline(...);

2

一個telnet服務器幾乎是微不足道的從頭開始編寫時,唯一容易的是過時的rlogin協議,它仍然可以從ssh訪問。你不會有任何麻煩做幾個套接字調用來實現這樣的事情。

您將被告知,我相信,不要使用telnet,而是SSH。這是一個很好的建議,但你有兩個很好的選擇:在本地開放代碼中實現telnet,並通過ssh隧道連接,或使用ssh服務器通過安全通道登錄。

請參閱:對於SSH servers。這不會直接幫助你,儘管apache具有容易嵌入的Java實現。如果你只是谷歌的「telnet服務器」,你會得到更多的鏈接,我可以在這裏以各種語言引用,其中許多語言包含易於實現的示例代碼。史蒂文斯的書也可能直接處理這個話題。

+0

謝謝,似乎修改telnet服務器代碼是一個簡單的解決方案。 –

+1

如果你看一下協議,telnet就不那麼簡單了......但是當然你不需要實現所有的協議 –

2

如果你不想處理套接字或共享內存段,它很容易讓你的守護進程更新SQLite3數據庫,這樣客戶端就可以通過一個簡單的查詢獲得它的統計信息,然而,當你需要使用主機操作系統的用戶/組管理來授予低級用戶訪問權限。

在所有的現實,它通常最好只使用一個簡單的套接字連接。在Linux中,很容易找出(本地)哪個用戶標識正在調用,並且只允許少數用戶標識。

0

這是我以前使用的軟件。它提供與Cisco CLI界面幾乎相同的CLI功能。

您只需將源代碼移植到lib文件夾下。

斑驢路由套房 https://www.nongnu.org/quagga/