C# Remote-Control ala TeamViewer/RemoteDesktop

Zhen

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
299
Hallo Leute,
ich hätte da mal ne kleine Frage (vor allem an die richtigen Profis unter euch =D ).

Also ich bin gerade dabei ein Tool für Remotezugriffe zu programmieren (sowas wie TeamViewer, Remote Desktop, etc.).

Ich hab zwar bereits eins geschaffen, aber... naja... ich bin doch relativ unzufrieden damit und wollte auf Basis von dem Code ein neues programmieren. Jetzt hatte ich da aber einige Gedanken gehabt (und da ich nicht weiß wie professionelle Tools wie TeamViewer arbeiten), und dachte ich ich frage hier im Forum mal nach wie Ihr das anstellen würdet.

Kurz zu dem alten Tool:
war eigentlich ganz simpel aufgebaut. Es gab einen Client der zwei Sockets ausführte (für Server zum senden und Client zum Empfangen) ausgeführt hat zu dem sich dann der Server verbinden konnte. Dieser Client hat in einer Schleife Screenshots erstellt und diese an den Server geschickt. Server hat diese empfangen und in einer Picturebox angezeigt. Alle Eingaben beim Server (Mausklicks, Tastatureingaben) wurden wieder an den Client geschickt und bei diesem ausgewertet/verarbeitet.

Dazu wurde natürlich nur ein einziger NetworkStream verwendet bzw. eben Socket (die Arbeit wurde übrigens in 2 Threads erledigt)


Jetzt hatte ich einfach mal so nen Gedanken für das neue Tool... was wäre wenn ich für Mauseingaben, Tastatureingaben und die Übertragung von Screenshots jeweils einen eigenen Thread erstelle und evtl sogar mit mehreren Networkstreams (TcpClients)??

Rein theoretisch gesehen dürfte dann doch nichts schief gehen wie z.B. dass sich die Eingaben für Tastatur und/oder Maus überschneiden oder das auf einmal während der Übertragung eines Screens eine Exception ausgelöst wird weil es eine Kollision gab zwischen Tastatureingabe und Screenübertragung.


Falls ich da irgendwie falsch liege, jemand Ideen/Vorschläge hat dann bin ich offen für alles und hoffe ihr könnt mir hier mal helfen und bisschen auf die Sprünge helfen wie ich das am besten bewerkstellige!!
 
Da du ja eh schon das .NET Framework verwendet, kannst du ja auch auf Basis von Microsoft RDP Protokoll arbeiten.

Simples Beispiel:
http://www.c-sharpcorner.com/uploadfile/thiagu304/remotedesktop10262009033113am/remotedesktop.aspx

Zusatzfunktionen kann man dann über WMI/IPMI lösen.

Nutze auch ein eigens programmiertes Tool welches:
- aus einer vCenter Datenbank alle Windows Guests ausliest
- RDP Zugriff, Zugriff auf alle RemoteServices von Windows (Registry,Services etc.)
- WMI/IMPI Schnittstelle zur Verwaltung
- Software patcher
 
Zuletzt bearbeitet:
Jetzt ist aber die Frage ob den das RDP Protokoll all zu sicher ist? Ich dachte daran eine SSL Verschlüsselung in meinem Tool einzubauen und auch die Daten die übermittelt werden nochmals mit AES oder so verschlüsseln. Dachte das würde zur Sicherheit halbwegs reichen =D
 
Ok vielen Dank nochmals. Nur noch ne kleine Frage, du nutzt in deinem Tool auch das RDP Protokoll wie in dem Tut beschrieben oder? Hast du da schon mal Probleme gehabt oder so und nutzt du es nur im Intranet oder auch übers Internet? ^^

Sorry für die vielen Fragen, aber bin halt erst im 1. Ausbildungsjahr von daher noch nicht so bewandert =D
 
Ich habe mein Tool noch etwas modifiziert - das z.B RemoteApp gleich mit gehen ja du hörst richtig sogar ein Windows XP kann Remote Apps hosten ;-)

Ich nutze das Tool hauptsächlich im Intranet - von außen ist abgeschottet.
Sollte aber keine Probleme geben solange IP/uDp gehen, die richtigen Ports frei sind.

Kein Ding, lieber mal Fragen und jeder Anfang ist schwer - weiß ich nur zu gut.
Viel Erfolg, halt mich aufm Laufenden.
 
Wie meinst du das mit "RemoteApp gleich mit gehen". Irgendwie steh ich mit dem Satz gerade aufm Schlauch =D
Ergänzung ()

PS: hast du vielleicht noch ein paar gute Tutorials explizit zu diesem Thema? Wäre dir sehr zu Dank verpflichtet :-)
 
Leider gibt es zur Thematik nur den Inhalt den MSDN zur Verfügung stellt, der Rest ist nach dem "Try and Error"-Prinzip erarbeitet ;-)

RemoteApp sind Applikationen die per RDP Stream von Host zu Client funktionieren (Seamless).
 
Zuletzt bearbeitet:
Achso... naja auf RDP muss ich leider verzichten, da es einige gravierende Nachteile hat =(

Die 2 wichtigsten wären:
1. Sicherheit
2. beim Aufschalten auf den PC wird der aktuelle User abgemeldet.

Mein Chef wünscht aber eher ein Tool wie TeamViewer. Mein neuster Gedanke wäre die Technik von Vlc für den Stream des Desktops zu benutzen. Die Keyboard und Mouse Eingaben wären dann eher das kleinere Problem.

Versuche mich übrigens gerade in die vlclib einzuarbeiten, aber das ist schon ne ganz andere Liga als paar Codeschnipsel aus dem Internet =D

Ich halt dich auf dem Laufenden ob und wie was klappt ;-)
 
Du kannst ja auf dem VNC Protokoll aufsetzen oder eben auf X11.

Die Sicherheit für RDP ist sehr gut, also da würde ich mir keine Sorgen machen!
Am CERN nutzen wir nur RDP für Remote arbeiten egal ob Intranet oder Internet.

Ich glaube der Aufwand den du mit VLC ins Haus holst, ist nicht zu unterschätzen.
Ich denke auch es ist für Remote Management total ungeeignet.
 
Zuletzt bearbeitet:
naja es muss ja nicht unbedingt VLC sein, aber die Idee wäre halt gewesen durch das komprimieren des bildschirminhalts mit einem videocodec die größe und den traffic zu senken und anschließend diesen inhalt (video) zu streamen (bisschen blöd ausgedrückt, aber ich hoffe du verstehst was ich meine xD ).

das blöde ist halt dass c# allgemein für sowas (meiner meinung nach zumindestens) VÖLLIG ungeeignet ist. auch die ganzen beispiele etc. im net basieren alle auf c oder c++

am wenigsten komme ich in c# mit der verdammten winapi zurecht. da find ich es in c++ doch um einiges einfacher.

...

Da aber ich ne Applikation in C# geschrieben hab und dieses Remote-Zeug Bestandteil des Programms ist kann ich es kaum in C++ schreiben... :(
 
Du kannst deinen Code, sofern es Managed Code in VS20xx ist, zu C++ von Winzigweich konvertieren.
Es landet eh alles im CLR umgewandelt.

Also die Datenkompression mit RDP ist super! Ich lasse kein VNC oder so für den VMware Cluster zu da RDP kaum Bandbreite verschwendet.

Ich find' die Umsetzung gerade mit C# einfacher, da ja alles da ist an Bibliotheken.
 
Hmm... ja das mit der Kompression stimmt schon, aber wie gesagt müssen die Leute den Desktop ja sehen können wenn wir uns raufschalten und was wir machen. Wäre bei dem ActiveX Control fürs RDP ja nicht der Fall.

Naja mal schauen was dabei raußkommt. Momentan bin ich ziemlich genervt mit dem Tool xDD
Nichts davon will so klappen wie es soll.
 
Zuletzt bearbeitet:
Der Ansatz mit VideoStreaming zu arbeiten ist schon sehr ungünstig. Effizienz erreichst du mit einem "Dirty Area" Ansatz bei dem du prüfst ob etwas verändert wurde und nur dann diese Daten verschickst.

Zwecks deiner zwei Probleme mit RDP sei aber noch gesagt:

Die Sicherheit ist kein Problem und für das User Problem gibt es Patches, such mal nach RDP concurrent sessions...
 
Vielen Dank für die Hilfestellung, gleich mal googlen danach. Meld mich dann sobalds wieder was Neues gibt oder... (ich wieder mal nicht weiterkomme :rolleyes: ) :D

Falls jemand noch Vorschläge, Tipps, Ratschläge etc. hat, dann bin ich immer ganz Ohr =) ;-)
 
Zurück
Oben