LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

【C#】如何判断当前是否开启了远程桌面连接

admin
2021年3月15日 23:49 本文热度 4530
在C#中用netstat -an | find "3389"查一下有没有连接是处于ESTABLISHED状态,本机发送的则远程端口是3389,如果有远程桌面过来则本机端口为3389。

Detecting remote desktop connection

无论如何,在程序中是否可以检测程序是从远程桌面会话内部运行还是在.NET 2.0中正常运行? 我想做的是,我创建了一个timeclock应用程序,该应用程序将一个人打入和打入并进行跟踪。 但是我怀疑这个特定的人正在在家中远程进入他们的计算机,并进出办公室。

有什么想法可以解决此问题(并且不能选择取消远程桌面访问)吗? 我的想法是,如果有一种方法可以检测到远程桌面会话,那么我将简单地将其实现到程序中并防止它们远程进行计时。


据称,

1
System.Windows.Forms.SystemInformation.TerminalServerSession

对于远程桌面会话(或VNC会话)为true

但我会测试以确保;-)


如果您不想为此添加对System.Windows.Forms.dll的引用(如上所述),则还可以直接通过PInvoke调用基础系统调用,如下所示:

1
2
    int result = GetSystemMetrics(SystemMetric.SM_REMOTESESSION);
    bool isRemoteSession = (result != 0);

可以在PInvoke.net-SystemMetric中找到SystemMetric枚举(但您可以只使用0x1000的值);在PInvoke.net上获取GetSystemMetrics的签名-GetSystemMetrics。

我用RDP和VNC进行了测试-与前者一起使用(也具有admin / console模式),而没有检测到后者。


对于Windows应用商店应用程序,您可以使用以下命令:

1
Windows.System.RemoteDesktop.InteractiveSession.IsRemote

http://www.appdeploy.com/messageboards/tm.asp?m=21420&mpage=1&key=厬

系统变量%sessionname%如果是本地则返回Console,如果是远程则返回RDP *。

1
2
isRDP = [System.Environment]
    .GetEnvironmentVariable("SESSIONNAME").StartsWith("RDP-")

好吧,几天前我也遇到过类似的问题。我解决该问题的方法是利用某些远程桌面应用程序使用已知的默认端口(至少是VNC和/或Microsoft远程桌面连接)这一事实。因此,我创建了一个方法来告知端口是否正在使用,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* Libraries needed */
using System.Linq;
using System.Net.NetworkInformation;

/*....
  ....
  ....*/


private static bool IsPortBeingUsed(int port)
{
    return IPGlobalProperties.GetIPGlobalProperties().
                GetActiveTcpConnections().
                    Any(
                            tcpConnectionInformation =>
                            tcpConnectionInformation.LocalEndPoint.Port == port
                       );
}

请记住,将带库的using语句放在方法所在文件的开头。

例如,您只需要传递一个参数,例如3389端口(这是远程桌面连接的默认端口)或5900端口(这是VNC连接的默认端口)。

该方法是使用C#4.0功能创建的,但是可以使用旧版本的C#.Net或Visual Basic完美地实现。

这对我有用,因为我只需要检查前面提到的两个应用程序。

希望对您有所帮助。


所有远程登录程序都需要在本地计算机上运行的服务或程序。如果允许这些服务或程序在其本地计算机上运行,??则发问者仅需担心VNC及其克隆。它们对于使用远程桌面不是必需的,并且所有操作系统都有远程桌面客户端。如果远程桌面正在运行,则不需要VNC服务器。

此外,除非您以管理员身份在服务器计算机上安装VNC克隆,否则无法为您登录。只要您不让用户像其他用户一样运行流程,唯一要担心的是您的其他员工之一是否以有问题的员工身份登录。如果真是这样,没有任何技术解决方案将是不够的。即使您必须为每个员工使用单独的卡登录,有问题的员工也可以给他的朋友卡。


对于WPF应用程序,有
System.Windows.SystemParameters.IsRemoteSessionSystem.Windows.SystemParameters.IsRemotelyControlled


如果您担心VNC,则可以使用netstat检查打开的TCP连接。在命令提示符下,键入:

1
netstat ---p tcp

并检查端口5900是否为" ESTABLISHED"。当然,5900是默认的连接端口,因此它取决于所设置的端口。

从那里,我在CodeGuru上找到了这篇文章,解释了如何在c#程序中使用netstat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
string sCommand ="netstat";
string sArgs ="";
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo (sCommand, sArgs);

psi.UseShellExecute = false;
psi.RedirectStandartOutput = true;

System.Diagnostics.Process proc = null;
proc = System.Diagnostics.Process.Start(psi);
proc.WaitForExit();

// Read the first 4 lines. They don't contain any information we need to get
for (int i = 0; i < 4; i++)
    proc.StandardOutput.ReadLine();

while (true)
{
    string strLine = proc.StandardOutput.ReadLine();
    if (strLine == null)
        break;

    // Analyze the line
    // Line is in following structure:
    // Protocol (TCP/UDP)   Local Address(host:port) Foreign Address(host:port) State(ESTABLISHED, ...)
}

仅需说明一下,如果会话使用的是GPU的RemoteFX虚拟化,则单独使用GetSystemMetrics(SystemMetric.SM_REMOTESESSION)对于Windows 8 / Server 2012及更高版本已不再可靠。

Microsoft在此处描述了检测RDS的"官方"方法:检测远程桌面服务环境(最新更新时间为18 May,18)。

它包括使用SystemMetrics调用和位于以下位置的注册表检查

1
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\GlassSessionId

那篇文章中的代码示例仅是C ++,但是鉴于它只是注册表查找,我认为人们不会觉得很难用其他语言进行复制。

我希望至少至少有一些.net内置函数在upthread中提到,可以完全遵循此要求,但是:

  • SystemParameters.IsRemoteSession在此处称为"到SM_REMOTESESSION的映射。请参阅GetSystemMetrics",以及

  • SystemParameters.IsRemotelyControlled在此处被记为相同,

所以我不乐观

我将尽快进行一些详细的检查并发布结果。


该文章在 2021/3/16 0:15:36 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved