4

我有几个运行 Windows CE5 的智能设备,我们的应用程序是用 .NETCF 3.5 编写的。智能设备通过集成的 GPRS 调制解调器连接到互联网。我的客户想要远程支持选项,但 VNC 和类似工具似乎无法完成这项工作。我发现 VNC 存在几个问题以使其正常工作。首先,它在智能设备上运行时存在严重的性能问题。第二个问题是互联网提供商有一个防火墙,如果它们不是来自智能设备本身,它会阻止所有传入的请求。因此,我无法启动与智能设备的远程桌面会话,因为请求并非来自智能设备。

我们可以得到自己的 APN,但是它们太贵了,而且对于我们部署的智能设备的数量来说,每月的成本也太高了。如果我们可以将开发成本添加到初始产品成本中,对我们来说更经济,因为我们的客户不喜欢高昂的每月成本,而是预先支付大笔费用。远程支持解决方案还可以让我们最大限度地减少现场支持。

这就是我们或多或少决定推出我们自己的远程桌面解决方案的原因。我们有用于在智能设备上捕获图像的代码,并且只获取自上一个周期以来发生变化的数据。我们需要做一个像logmein.com(不支持WinCE5)这样的通信解决方案,其中智能设备连接到服务器,然后我们可以将数据流式传输到支持人员的客户端。基本上,智能设备会启动与我们服务器的连接,并在服务器请求时开始传送屏幕数据。支持客户端连接到服务器并获取可用流的列表,然后选择一个进行监听。

考虑到我们必须在智能设备上使用 .NETCF 3.5 中的解决方案,有什么建议吗?除了简单的肥皂网络服务,我们的交流经验有限。

4

1 回答 1

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、远程文件系统、远程打印、远程声音......你明白了)

我会假设您知道如何正确保护所有这些东西,以便为您的客户端进行身份验证和授权(是否允许用户 foo 访问智能设备栏?)。

在您的隧道服务器上,启动一个服务器套接字(侦听入站连接,或从智能设备的角度来看,智能设备出站连接)来解复用连接和会话。打开连接后,启动 BEEP 并注册回调/启动线程以等待身份验证/心跳会话。对智能设备执行 AAA 所需的检查——这些设备是否被允许、是否已知、费用多少等。 您的隧道服务器代表您的智能设备转发数据。 对于每个 BEEP 会话,在 AAA 过程成功后,为 BEEP 会话附加一个名称(设备名称);失败时,关闭连接并让 AAA 机制知道(以阻止攻击者)。您的隧道服务器还应该设置与前端交互所需的内容——也就是说,它应该具有与 BEEP 交互的代码,以解复用远程显示数据的流。

在您的前端服务器(可以是与隧道服务器相同的框)上,安装 AAA 例程——检查用户是否已知、是否允许用户、应向用户收取多少费用等。一旦所有检查通过,建立从前端服务器到隧道服务器的安全连接。获取隧道服务器知道允许用户访问的设备名称。此时,您应该能够从隧道服务器获取基于设备名称的“纯文本”流。将此流转发回用户(例如,通过 TLS,或再次通过 TLS 上的 BEEP),或发送远程显示客户端所需的配置,以使用所需参数连接到隧道服务器,以访问远程显示协议的流。

于 2012-12-25T05:22:03.680 回答