2012-11-15 71 views
4

我有幾個運行Windows CE5的智能設備,我們的應用程序是用.NETCF 3.5編寫的。智能設備通過集成的GPRS調制解調器連接到互聯網。我的客戶希望有一個遠程支持選項,但VNC和類似的工具似乎無法完成這項工作。我發現VNC有幾個問題需要解決。首先,它在智能設備上運行時會遇到嚴重的性能問題。第二個問題是互聯網提供商有一個防火牆,如果它們不是來自智能設備本身,則會阻止所有傳入的請求。因此,我無法啓動與智能設備的遠程桌面會話,因爲請求不是來自智能設備。複製智能設備的logmein.com行爲

我們可以獲得我們自己的APN,但是它們太昂貴了,每月的成本對我們部署的智能設備數量來說太大了。如果我們能夠將開發成本增加到初始產品成本,對我們來說更爲經濟,因爲我們的客戶不喜歡高昂的月度成本,而是先付出大筆費用。遠程支持解決方案還可以使我們減少現場支持。

這就是爲什麼我們或多或少決定推出我們自己的遠程桌面解決方案。我們有用於在智能設備上捕獲圖像的代碼,並且只能獲取自上次循環以來更改的數據。我們需要的是製作諸如logmein.com(不支持WinCE5)的通信解決方案,其中智能設備連接到服務器,然後我們可以將數據傳輸到我們的支持人員的客戶端。基本上,智能設備啓動到我們服務器的連接,並在服務器請求時開始提供屏幕數據。支持客戶端連接到服務器並獲取可用流的列表,然後選擇一個進行聆聽。

對於如何做到這一點的任何建議,考慮到我們必須在智能設備上使用.NETCF 3.5中的解決方案?除了簡單的SOAP網絡服務之外,我們的通信體驗有限。

+0

我們已經實現了自己的VNC服務器爲Windows CE 5.0,如果你想使用它是開源的。它還支持16位色彩,這可以提高互聯網上的性能。服務器是用C/C++編寫的,但是我們從C#中單獨啓動它。如果您有興趣,我可以提供鏈接。一個優點VNC是,你可以使用任何現有的VNC客戶端,智能手機等,連接 – Alan

+0

謝謝你的提議,但你可以讓服務器向客戶端發起的連接,而不是在客戶端連接到正常的方式服務器?主要問題是GPRS提供商的防火牆會丟棄所有不是源自智能設備的連接請求。 – user1826673

回答

2

既然你問了一個建議,我會建議這樣的:

不要重複。儘可能重複使用。您可以使用SSH執行隧道連接,因此您的智能設備上通過GPRS建立SSH連接(例如,PuTTY或plink的端口,在循環內);將遠程端口轉發到本地端口,綁定到SSH服務器的本地地址(127.0.0.1(sshd):4567 => localhost(smart_device_01):4567)。您的客戶端連接到您的SSH服務器並訪問每個設備的分配端口。

這樣說,這可能不是你要找的答案。下面 - 你可能正在尋找的答案。


根據我的LogMeIn的是如何工作的分析,你會希望一個HTTPS或TLS服務器在您的智能設備將推動數據。我們稱之爲你的隧道服務器。

您可能想要產生一個反覆嘗試連接到隧道服務器的新線程(從智能設備到服務器的出站連接,根據您的指定要求)。使用像BEEP/BXXP這樣的協議,您可以封裝和複用面向消息的或面向流的會話。將BXXP/BEEP包裝到TLS中,並通過隧道傳送到您的隧道服務器。 BEEP允許您將流複用到一個連接上 - 如果您需要內部LogMeIn解決方案的全部功能,則需要使用類似的方法。

建立連接後,進行新的BEEP會話。在新的會話中,告訴隧道服務器您的系統識別信息(設備名稱,設備認證簽名)。將心跳數據(定期的時間戳)寫入這個新的會話。

設置一個回調(或其他線程),接口連接您的BEEP控制會話。注意請求服務的消息。當這樣的請求進入時,產生所需的線程以從您的自定義遠程顯示協議複製數據,並將這些數據通過相同的通道返回。

這爲您的智能設備的程序的基本前提。您可以根據需要添加功能,比如說,以匹配LMI的IT Reach訂閱提供的內容(遠程註冊表,安全隧道Telnet,遠程文件系統,遠程打印,遠程聲音......您可以獲得該想法)

I'我會做出一些假設,你知道如何妥善保護所有這些東西,以便爲你的客戶進行身份驗證和授權(用戶foo是否被允許訪問智能設備欄?)。

在您的隧道服務器,啓動服務器套接字(偵聽入站連接,或從智能設備的角度來看,智能設備出站連接),其解複用連接和會話。一旦打開連接,啓動BEEP並註冊回調/啓動線程以等待認證/心跳會話。執行對AAA所需的檢查,以智能設備 - 是這些設備允許的,都知道,多少你的隧道服務器轉發數據代表您的智能設備的費用,等等。對於每個BEEP會話,在AAA過程成功後,將名稱(設備名稱)附加到BEEP會話;失敗時關閉連接並讓AAA機制知道(阻止攻擊者)。您的隧道服務器還應該設置與前端進行交互所需的內容 - 也就是說,它應該有代碼與BEEP進行交互,以將您的遠程顯示數據流解複用。

在您的前端服務器(可以與隧道服務器相同的盒子)上安裝AAA例程 - 檢查用戶是否知道,是否允許用戶,應該向用戶收費多少等等。一旦所有檢查都通過,從前端服務器到隧道服務器進行安全連接。獲取隧道服務器知道用戶被允許訪問的設備名稱。此時,您應該能夠從隧道服務器獲取基於設備名稱的「純文本」流。 (經由BEEP通過TLS再次經由TLS,例如,或)轉發該流返回給用戶,或發送所需的配置爲遠程顯示客戶端與所需的參數連接到隧道服務器訪問遠程顯示協議的流。

+0

只是在這裏吹響自己的號角。 :) PocketPuTTY的正式版雖然沒有維護,但在Windows Mobile平臺上運行良好,並可能在Windows CE平臺上運行良好。它包括一些端口轉發功能。我保留了PocketPuTTY的一個分支,它有一些額外的補丁,一些是由Ken Johnson/Skywing/nyaneve.net創建/收集的。如果您對PocketPuTTY進行了更改,我很樂意聽到他們的消息。 – user314104

+0

我一直在尋找的答案讓我的老闆說服了這個功能;)膩子解決方案當然看起來很有希望。然而,我們很可能在不久的將來會改變平臺,我們將會使用linux,所以遠程問題可能會變得更容易。感謝您的回答。 – user1826673

+0

不客氣。感謝您回來標記答案。 – user314104