Laden...

Abfrage auf Remote Verbindung

Erstellt von Larsen vor 9 Jahren Letzter Beitrag vor 9 Jahren 9.534 Views
L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren
Abfrage auf Remote Verbindung

Hallo Experten,

ich brauche einmal eure Hilfe bei einer hoffentlich einfachen Problemstellung 😃

Folgende Situation:
Wir haben bei uns im Team einen Rechner, an dem unser komplettes Testequipment angeschlossen ist. Dadurch müssen mehrere Leute auf diesem Rechner arbeiten.
Damit die Konfiguration immer für alle gleich ist und wir einen geringen Pflegeaufwand haben, haben wir auf dem Rechner EINEN User angelegt, auf dem dann alle arbeiten sollen. Derjenige, der gerade an dem Rechner was machen will, hängt sich über RemoteDesktop einfach drauf. Das klappt auch ganz gut.

Da aber die RemoteDesktop Verbindung über EINEN User einfach eine schon vorhandene Verbindung kappt, ist es etwas nervig, vor der Verbindung bei den Kollegen abzufragen, ob gerade jemand auf dem Rechner ist. Man will ja einen Kollegen nicht einfach rauswerfen 😃

Nun die Frage, oder die Idee.
Ich möchte auf dem TeamRechner ein kleines Prog laufen lassen, das eine Remote Verbindung erkennt und auf einem Server in einer Datei ein Flag setzt.
Wenn die Remote Verbindung beendet wird, wird das Flag wieder gelöscht.
Dieses Flag könnte jeder kurz prüfen, bevor er sich auf dem Rechner anmeldet.

Das geht bestimmt auch eleganter, aber wenn das geht, wäre mir schon geholfen 😃

Hat jemand einen Ansatz zur Lösung?

Gruß
Lars

PS: auf dem Rechner läuft Win7

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

1.696 Beiträge seit 2006
vor 9 Jahren

Dazu brauchst du doch kein Programm, sondern einfach im Logonscript irgendwas, z.B. der Username, in einer Datei in einem Netlaufwerk schreiben, dann kann man nachgucken wer grad angemeldet ist. Und bei Abmelden, die Datei leeren. Das ganze kannst du auch per Policy regeln.

Sorry, totaler Blödsinn, was ich geschrieben habe 😄

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

Hallo vbprogger,

bin mir nicht sicher ob dein Vorschlag funktioniert, da der Rechner ja ständig mit dem gleichen User läuft. Es verbinden sich eben nur unterschiedliche Kollegen per Remote Desktop mit dem Rechner.
Aber eben alle unter dem gleichen User. Ist jemand fertig, wird nur die Remote Desktop Verbindung gekappt, der Rechner bleibt so wie er ist und der nächste könnte sich verbinden.

Gruß

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

H
523 Beiträge seit 2008
vor 9 Jahren

Mach doch VNC drauf und verbinde Dich zur Prüfung, ob jemand gerade auf dem Rechner arbeitet, kurz per VNC.

Du solltest bei der Verbindung im Bildschirm "Drücken Sie STRG-ALT-ENTF..." landen. Und wenn Du das dann drückst siehst Du, ob gerade jemand angemeldet ist.

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

Hallo hypersurf,

der eine User, unter dem alle arbeiten ist doch immer angemeldet. Ich müßte nur irgendwie prüfen, ob gerade eine Remote Desktop Verbindung zu einem anderen Rechner läuft. Oder habe ich dich falsch verstanden?

Gruß

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

1.696 Beiträge seit 2006
vor 9 Jahren

Ich gehe davon aus, dass VNC, TeamViewer u.a. nicht gewünscht ist, vielleicht hilft dir dieser Workaround:

Erstelle ein kleines Programm mit einem Button. Beim Klick darauf wird der Name des Users und Timestamp in einer Datei im Netzlaufwerk geschrieben, anschließend wird RDP über Process aufgerufen. Somit hast du deine Info. Deine Mitstreiter müssen daran denken, dass sie nur mit dem Programm die RDP aufbauen dürfen.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

Hallo vbprogger,

das stimmt, das wäre eine Lösung, die schon mal besser ist, als die momentane Situation. Danke, da hätte ich auch selbst drauf kommen können 😃

Aber so ganz möchte ich die Hoffnung noch nicht aufgeben, dass das auch automatisch geht.

Irgendeiner eine Idee?

Gruß

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

2.298 Beiträge seit 2010
vor 9 Jahren

Hallo,

verstehe nicht wieso alle direkt auf VNC oder ähnliches verweisen. - Mit Boardmitteln kann der RDP-Server doch dahingehend konfiguriert werdern, dass mehrere Anmeldungen mit gleichem Nutzer möglich sind.

Der folgende Link ist zwar für Windows 2008 / 2012, funktioniert aber für ältere Versionen ähnlich:
Windows 2008/2012: Mehrere RDP-Sessions pro User erlauben

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

H
523 Beiträge seit 2008
vor 9 Jahren

Oder habe ich dich falsch verstanden?

Hast Du nicht, ich bin nur davon ausgegangen, dass der Benutzer immer wieder abgemeldet wird.

H
523 Beiträge seit 2008
vor 9 Jahren

Hallo,

verstehe nicht wieso alle direkt auf VNC oder ähnliches verweisen. - Mit Boardmitteln kann der RDP-Server doch dahingehend konfiguriert werdern, dass mehrere Anmeldungen mit gleichem Nutzer möglich sind.

Der folgende Link ist zwar für Windows 2008 / 2012, funktioniert aber für ältere Versionen ähnlich:

>

Das geht aber nicht bei Windows 7.

2.298 Beiträge seit 2010
vor 9 Jahren

Stimmt, Windows Vista und Windows 7 hab ich grad ausgeblendet. - Wobei es dort Versionsabhängig ist.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

😃 Deshalb habe ich die in dem Artikel beschriebenen Einstellungen nicht gefunden 😃

Also vielleicht zurück zur Ursprungsidee.

Gibt es keine Möglichkeit das Vorhandensein einer RemoteDesktop Verbindung abzufragen?
Das würde mir ja reichen, dann könnte ich in Abhängigkeit davon mein Flag setzten oder zurücknehmen.

Irgendwie eine Schleife über die vorhandenen Netzwerkverbindungen mit Abfrage auf einen bestimmten Typ, Port, sonstwas.

Ideen?

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

1.696 Beiträge seit 2006
vor 9 Jahren

Einen Tipp habe ich noch 😄

Die Umgebungsvariable CLIENTNAME auf der Maschine sagt aus, von welche PC die RDP-Session erzeugt wird, also wenn du ein residentes Programm auf dem Win7 PC laufen lässt, der ständig prüft:

Environment.GetEnvironmentVariable("CLIENTNAME")

dann weißt du zwar nicht den User, aber sein PC 😉

oder netstat -a auswerten, suche nach folgende Ausgabe:

  Proto  Lokale Adresse         Remoteadresse          Status
  ...
  ...
  TCP    1.2.3.4:3389           PC123456:12345         HERGESTELLT

Der Port 3389 ist für MS-RDP reserviert. Damit kommt man auch an dem Namen des PC der die Verbindung aufgebaut hat.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

3.170 Beiträge seit 2006
vor 9 Jahren

Hallo,

das müsste man eigentlich mit query session /server:SERVERNAME bzw. qwinsta /server:SERVERNAME direkt abfragen können - vorausgesetzt, der Benutzer der die Query ausführt hat die erforderlichen Berechtigungen auf dem abzufragenden Server.

Gruß, MarsStein

Edit: siehe auch http://ss64.com/nt/query-session.html

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

Hallo MarsStein,

query session /server:SERVERNAME

scheint genau das Richtige zu sein !!!

Jetzt muss ich aber noch mal etwas doof nachfragen.

Wie muss ich das denn in meinem C# Prog nutzen?
Geht das über Process? Wenn ja, wie kriege ich denn da die Ausgabe?

Oder gibt es auch einen Äquivalenten Aufruf in C# direkt?

Gruß
Lars

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

Habe mir jetzt folgendes zusammengebastelt:


var proc = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = @"query.exe",
                    Arguments = "session /server:ABC12345",
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    CreateNoWindow = true
                }
            };

            proc.Start();
            List<string> Ausgabe = new List<string>();
            while (!proc.StandardOutput.EndOfStream)
            {
                Ausgabe.Add(proc.StandardOutput.ReadLine());
            }

das funktioniert aber nur, wenn ich das query im gleichen Verzeichnis liegen habe, im System32 mag er das nicht direkt finden !

Spricht irgendwas gegen diese Lösung?

Gruß

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

3.170 Beiträge seit 2006
vor 9 Jahren

Hallo,

muss es ein C#-Programm sein?
Wenn Du einfach nur den Benutzern eine Möglichkeit geben willst, die Abfrage zu machen, ohne den Befehl jedesmal zu tippen, würde ich ein einfaches Konsolenscript bevorzugen, also eine .cmd-Datei, die können die User dann auch einfach doppelclicken.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

Da hast du natürlich Recht MarsStein.

Der Gedanke, dass in C# zu machen kommt daher, das ich das etwas komfortabler machen wollte.

Ich wollte den Status, ob der Rechner "frei" ist in einem kleinen Programm unten in der Taskleiste anzeigen. Z.B. einen grünen Punkt, wenn frei und einen roten Punkt, wenn belegt.

Per Doppelklick auf den grünen Punkt sollte sich dann eine Verbindung aufbauen.

Fand ich irgendwie ganz cool. Aber grundsätzlich hast du natürlich Recht.

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

3.170 Beiträge seit 2006
vor 9 Jahren

Hallo,

ok, das kannst Du ja auch machen. Allerdings ist es IMO ungüstig, die query.exe irgendwo rumzukopieren.

Dass Du nicht an System32 kommst, ist ein 32/64bit Problem des Betriebssystems.
Kompiliere Dein Projekt auf jeden Fall für Any CPU als Zielplattform. Und dann sieh zu, dass er Haken "32-Bit bevorzugen" **nicht **gesetzt ist!
Dann sollte Dein Code so wie er ist laufen, ohne die query.exe zu kopieren.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

Danke MarsStein,

das ist ein guter Tip. Das werd ich morgen ausprobieren.

Also ich werde Berichten ob das geklappt hat.
Danke schon mal an alle Helfer !!!!

Gruß Lars

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

Hallo MarsStein,

die Einstellungen für das Projekt haben genau das bewirkt, was du vorhergesagt hast. Klasse !!!

Das kleine Prog ist auch schon fertig und läuft zufriedenstellend 😃

Klasse wäre jetzt natürlich noch, wenn ich im SystemTray im Tool-Text anzeigen könnte, welcher Rechner die Verbindung aufgebaut hat.

Mit netstat -a und der Abfrage auf den Port 3389 würde das gehen, aber den Befehl muss ich ja auf dem Server Rechner laufen lassen 😦

Geht so eine Abfrage auch Remote vom "Fremdrechner"? Also rauszubekommen, welcher Rechner die RDP Verbindung aufgebaut hat?

Hab natürlich schon gegoogelt aber bin nicht wirklich fündig geworden.

Gruß
Lars

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 9 Jahren

Auch das ist mittlerweile gelöst... 😃

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!