【C#】如何判断当前是否开启了远程桌面连接
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
在C#中用netstat -an | find "3389"查一下有没有连接是处于ESTABLISHED状态,本机发送的则远程端口是3389,如果有远程桌面过来则本机端口为3389。
Detecting remote desktop connection
无论如何,在程序中是否可以检测程序是从远程桌面会话内部运行还是在.NET 2.0中正常运行? 我想做的是,我创建了一个timeclock应用程序,该应用程序将一个人打入和打入并进行跟踪。 但是我怀疑这个特定的人正在在家中远程进入他们的计算机,并进出办公室。 有什么想法可以解决此问题(并且不能选择取消远程桌面访问)吗? 我的想法是,如果有一种方法可以检测到远程桌面会话,那么我将简单地将其实现到程序中并防止它们远程进行计时。 据称,
对于远程桌面会话(或VNC会话)为true 但我会测试以确保;-) 如果您不想为此添加对System.Windows.Forms.dll的引用(如上所述),则还可以直接通过PInvoke调用基础系统调用,如下所示:
可以在PInvoke.net-SystemMetric中找到SystemMetric枚举(但您可以只使用0x1000的值);在PInvoke.net上获取GetSystemMetrics的签名-GetSystemMetrics。 我用RDP和VNC进行了测试-与前者一起使用(也具有admin / console模式),而没有检测到后者。 对于Windows应用商店应用程序,您可以使用以下命令:
http://www.appdeploy.com/messageboards/tm.asp?m=21420&mpage=1&key=厬 系统变量%sessionname%如果是本地则返回Console,如果是远程则返回RDP *。
好吧,几天前我也遇到过类似的问题。我解决该问题的方法是利用某些远程桌面应用程序使用已知的默认端口(至少是VNC和/或Microsoft远程桌面连接)这一事实。因此,我创建了一个方法来告知端口是否正在使用,如下所示:
请记住,将带库的using语句放在方法所在文件的开头。 例如,您只需要传递一个参数,例如3389端口(这是远程桌面连接的默认端口)或5900端口(这是VNC连接的默认端口)。 该方法是使用C#4.0功能创建的,但是可以使用旧版本的C#.Net或Visual Basic完美地实现。 这对我有用,因为我只需要检查前面提到的两个应用程序。 希望对您有所帮助。 所有远程登录程序都需要在本地计算机上运行的服务或程序。如果允许这些服务或程序在其本地计算机上运行,??则发问者仅需担心VNC及其克隆。它们对于使用远程桌面不是必需的,并且所有操作系统都有远程桌面客户端。如果远程桌面正在运行,则不需要VNC服务器。 此外,除非您以管理员身份在服务器计算机上安装VNC克隆,否则无法为您登录。只要您不让用户像其他用户一样运行流程,唯一要担心的是您的其他员工之一是否以有问题的员工身份登录。如果真是这样,没有任何技术解决方案将是不够的。即使您必须为每个员工使用单独的卡登录,有问题的员工也可以给他的朋友卡。 对于WPF应用程序,有 如果您担心VNC,则可以使用
并检查端口5900是否为" ESTABLISHED"。当然,5900是默认的连接端口,因此它取决于所设置的端口。 从那里,我在CodeGuru上找到了这篇文章,解释了如何在c#程序中使用
仅需说明一下,如果会话使用的是GPU的RemoteFX虚拟化,则单独使用GetSystemMetrics(SystemMetric.SM_REMOTESESSION)对于Windows 8 / Server 2012及更高版本已不再可靠。 Microsoft在此处描述了检测RDS的"官方"方法:检测远程桌面服务环境(最新更新时间为18 May,18)。 它包括使用SystemMetrics调用和位于以下位置的注册表检查
那篇文章中的代码示例仅是C ++,但是鉴于它只是注册表查找,我认为人们不会觉得很难用其他语言进行复制。 我希望至少至少有一些.net内置函数在upthread中提到,可以完全遵循此要求,但是:
所以我不乐观 我将尽快进行一些详细的检查并发布结果。 该文章在 2021/3/16 0:15:36 编辑过 |
关键字查询
相关文章
正在查询... |