我喜欢检查远程主机上的应用程序是否通过 VNC Viewer 或其他类似的 VNC 产品进行访问。我们的应用程序中有安全首选项,如果远程用户访问该应用程序,则应限制对该应用程序的访问。
传统上,我们的产品使用以下方式检测远程登录Windows 终端服务(WTS)API,但 VNC 似乎不遵循 Windows 的远程桌面协议。因此,我们的应用程序无法从 WTS API 获取远程用户登录的信息。
是否有任何 API 可以检测终端主机上的 VNC 远程会话?
答案1
不,没有。你说得对,VNC 不与终端服务集成——它的工作方式是通过像屏幕截图工具一样捕获显示内容,并发送虚假的键盘/鼠标事件。因此,会话同时是本地的和远程(即,即使在远程控制时,它仍然保持本地连接在 WTS 中)。
您(可能)可以区分输入事件和真实事件(如果是出于“安全目的”,那么这可能是您想要关注的部分),但您无法检测到实际连接的存在,因为每个远程访问工具的操作方式都不同,并且它们没有使用通用的 API。(别忘了有多个独立的 VNC 应用程序,还有 TeamViewer、AnyDesk、PiKVM 等等……)
最近我需要走遍整个实验室来手动安装一个程序的 X 个副本,但该程序却完全不允许通过远程桌面激活学术许可证,因此我想表达我对此类“功能”的反对。