compact-framework – 复制智能设备的logmein.com行为

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

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

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

考虑到我们必须在智能设备上使用.NETCF 3.5中的解决方案,有关如何做到这一点的任何建议吗?除简单的肥皂网服务外,我们的沟通经验有限.

最佳答案 既然你要求提出建议,我会建议:

不要重新发明.尽可能地重复使用.您可以使用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再次),或者为远程显示客户端发送所需的配置,以使用所需参数连接到隧道服务器以访问远程显示协议的流.

点赞