我有几个运行Windows CE5的智能设备,我们的应用程序是用.NETCF 3.5编写的。智能设备通过集成的GPRS调制解调器连接到互联网。我的客户希望有一个远程支持选项,但是VNC和类似的工具似乎不能完成这项工作。为了让VNC正常工作,我发现了几个问题。首先,它在智能设备上运行时存在严重的性能问题。第二个问题是,互联网提供商有一个防火墙,如果所有传入的请求不是来自智能设备本身,它就会阻止这些请求。因此,我无法启动与智能设备的远程桌面会话,因为请求不是来自智能设备。
如果我们可以将开发成本加到初始产品成本中,对我们来说更划算,因为我们的客户不喜欢高额的月度成本,而是提前支付一大笔钱。远程支持解决方案还将使我们能够最大限度地减少现场支持。
这就是为什么我们或多或少决定推出自己的远程桌面解决方案的原因。我们需要的是像logmein.com (不支持WinCE5)这样的通信解决方案,其中智能设备连接到服务器,然后我们可以从服务器将数据流式传输到我们的支持人员的客户端。
考虑到我们必须在智能设备上使用.NETCF 3.5解决方案,有什么建议吗?除了简单的soap web服务之外,我们的通信经验有限。
发布于 2012-12-25 13:22:04
不要重新发明。尽可能地重用任何东西。您可以使用SSH执行隧道,因此通过智能设备上的GPRS建立一个SSH连接(例如,PuTTY或plink的端口,在循环内);将远程端口转发到本地端口,绑定到SSH服务器的本地地址(127.0.0.1 (sshd):4567 => localhost (smart_device_01):4567)。
话虽如此,但这可能不是你想要的答案。下面是你可能正在寻找的答案。
根据我对LogMeIn工作原理的分析,您可能希望创建一个HTTPS或TLS服务器,您的智能设备将在其中推送数据。让我们称它为隧道服务器。
您可能希望派生一个重复尝试连接到隧道服务器的新线程(根据您指定的要求,从智能设备到服务器的出站连接)。使用像BEEP/BXXP这样的协议,您可以封装和多路复用面向消息或面向流的会话。将BXXP/BEEP封装到TLS中,并通过隧道连接到您的隧道服务器。BEEP允许将流多路复用到一个连接上--如果您想要内部LogMeIn解决方案的全部功能,则需要使用类似下面的内容。
使用新会话,告诉隧道服务器您的系统标识信息(设备名称、设备身份验证签名)。
注意是否有请求服务的消息。当这样的请求传入时,派生所需的线程,以便从您的自定义远程显示协议复制数据,并通过相同的通道将此数据推送回来。
这为您的智能设备程序设置了基本前提。您可以根据需要添加功能,例如,与LMI的IT Reach subscription提供的功能相匹配(远程注册表、安全隧道Telnet、远程文件系统、远程打印、远程声音...你明白了吧)
我将做一些假设,假设您知道如何为客户端的身份验证和授权适当地保护所有这些内容(允许用户foo访问智能设备栏吗?)。
在隧道服务器上,启动分离连接和会话的服务器套接字(侦听inbound connections,或从智能设备的角度侦听smart device outbound connections)。打开连接后,启动BEEP并注册一个回调/启动一个线程,以等待身份验证/心跳会话。对智能设备执行所需的AAA检查--这些设备是否被允许,它们是否已知,成本如何等。您的隧道服务器代表您的智能设备转发数据。对于每个蜂鸣会话,在AAA过程成功后将一个名称(设备名称)附加到BEEP会话;如果失败,请关闭连接并让AAA机制知道(以阻止攻击者)。您的隧道服务器还应该设置与前端交互所需的内容--也就是说,它应该具有与BEEP交互的代码,以多路复用远程显示数据的流。
在您的前端服务器(可以是与隧道服务器相同的框)上,安装AAA例程--检查用户是否已知,是否允许该用户,应该向用户收取多少费用等。一旦所有检查通过,建立一个从前端服务器到隧道服务器的安全连接。获取隧道服务器知道允许用户访问的设备名称。此时,您应该能够从隧道服务器获得基于设备名称的“纯文本”流。
https://stackoverflow.com/questions/13398563
复制相似问题