La détection de connexion bureau à distance

y a-t-il de toute façon, dans un programme, pour détecter si un programme est exécuté depuis une session de bureau à distance ou si le programme est exécuté normalement dans .NET 2.0? Ce que j'essaie de faire, j'ai créer une pointeuse application horloge d'une personne et de sortir et de garder trace. Mais cette personne en particulier, je soupçonne, est remoting dans leur ordinateur au travail, de la maison, et le clocking dedans et dehors.

toutes les idées comment je peux résoudre ce problème (et de prendre bureau à distance l'accès n'est pas une option)? Mon idée est, s'il y a un moyen de détecter les sessions de bureau à distance, je vais simplement l'implémenter dans le progam et les empêcher de se connecter à distance.

47
demandé sur Alan 2009-06-10 09:29:26

8 réponses

soi-disant,

System.Windows.Forms.SystemInformation.TerminalServerSession

sera vrai pour une session de bureau à distance (ou session VNC)

mais j'aimerais le tester pour en être sûr ;-)

46
répondu Steven A. Lowe 2009-06-10 16:47:16

si vous ne voulez pas ajouter de référence au système.Windows.Forme.dll juste pour cela (comme suggéré ci-dessus), alors vous pouvez également appeler l'appel système sous-jacent directement via PInvoke, comme ceci:

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

le dénombrement systématique se trouve à PInvoke.net -SystemMetric (mais vous pouvez juste utiliser la valeur de 0x1000); tandis que la signature pour GetSystemMetrics à PInvoke.net -GetSystemMetrics .

j'ai testé cela avec RDP et VNC - fonctionne avec le premier (mode admin/console également), ne détecte pas le second.

14
répondu kicsit 2012-04-13 09:44:10

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

la variable système %sessionname% retournera la Console si elle est locale ou RDP* si elle est distante.

isRDP = [System.Environment]
    .GetEnvironmentVariable("SESSIONNAME").StartsWith("RDP-")
9
répondu John Gietzen 2011-08-23 07:46:13

pour les applications Windows Store, vous pouvez utiliser ceci:

Windows.System.RemoteDesktop.InteractiveSession.IsRemote
8
répondu Thomas Levesque 2013-12-03 14:39:55

J'ai eu un problème similaire il y a quelques jours. Ce que j'ai fait pour résoudre il a été tiré profit du fait que certains application De Bureau À Distance utiliser un connu port par défaut , au moins VNC et/ou Microsoft connexion de Bureau À Distance . J'ai donc créé une méthode qui indique si le port est utilisé, comme suit:

/* 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
                       );
}

N'oubliez pas de mettre les instructions d'utilisation avec les bibliothèques au début du fichier dans lequel la méthode est.

vous avez juste à passer par exemple un paramètre comme le 3389 port qui est le port par défaut pour Connexion Bureau À Distance , ou le 5900 port qui est le port par défaut pour connexions VNC .

la méthode est créée avec C# 4.0 caractéristiques mais il peut parfaitement être fait avec et plus ancienne version de C#.Net ou visuellement Basique.

cela a fonctionné pour moi puisque j'avais seulement besoin de vérifier pour les deux applications que j'ai mentionnées avant.

j'espère que ça peut aider.

4
répondu JhordyRosario 2012-12-14 16:18:46

tous les programmes de connexion à distance nécessitent un service ou un programme tournant sur la machine locale. L'auteur de la question n'a qu'à s'inquiéter de la VNC et de ses clones si ces services ou programmes sont autorisés à fonctionner sur sa machine locale. Ils ne sont pas nécessaires pour L'utilisation de Bureau À Distance, et il existe des clients de bureau à distance pour tous les systèmes d'exploitation. Un serveur VNC est inutile si le bureau distant fonctionne.

de plus, les clones VNC ne peuvent pas se connecter pour vous si vous ne les installez pas en tant qu'administrateur sur la machine serveur. Tant que vous ne laissez pas les utilisateurs exécuter des processus comme les autres utilisateurs, la seule préoccupation est si l'un de vos autres employés se connecte en tant que problème. Et si c'est le cas, aucune solution technique ne sera suffisante. Même si vous avez des cartes individuelles pour chaque employé qui doit être utilisé pour se connecter, l'employé problématique pourrait tout simplement donner à son ami la carte.

3
répondu trlkly 2012-06-19 09:06:54

si vous êtes préoccupé par VNC, il semble qu'il soit possible de vérifier les connexions TCP ouvertes avec netstat . Dans une invite de commande, tapez:

netstat -n -a -p tcp

et vérifiez si le port 5900 est"établi". Bien sûr, 5900 est le port de connexion par défaut, donc il dépend du port qui est défini.

de là, j'ai trouvé ce post à CodeGuru qui explique comment utiliser netstat dans votre c# programme:

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, ...)
}
2
répondu Jared Harley 2015-02-04 08:40:21

Pour les applications WPF il y a System.Windows.SystemParameters.IsRemoteSession et System.Windows.SystemParameters.IsRemotelyControlled .

0
répondu Peter 2018-10-01 09:29:41