Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Remote Desktop: Rechner eindeutig identifizieren (https://www.delphipraxis.net/208850-remote-desktop-rechner-eindeutig-identifizieren.html)

Denkfehler 21. Sep 2021 16:20


Remote Desktop: Rechner eindeutig identifizieren
 
Hallo zusammen,

Szenario:
  • Remote Desktop Umgebung von Mircosoft
  • Arbeitsplatz Stationen (Fat Clients) greifen über die Anwendung "Remotedesktopverbindung" (mstsc.exe) auf einen Server zu
  • Auf dem Server wird von jedem zugreifenden PC eine Anwendung ausgeführt
  • Arbeitsplatz Stationen werden "auseinander gehalten" über den Computernamen, der ermittelt werden kann (Vgl. https://www.delphipraxis.net/35522-c...rausfiden.html) oder auch folgender Code
    Code:
             if WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, SessionInfoPtr^[i].SessionId, WTSUserName, acNameBuff, nByteCount) then begin
                     aWTSUsername:=StrPas(PChar(acNameBuff));
                    WTSFreeMemory(acNameBuff);
                 end;
                 if WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, SessionInfoPtr^[i].SessionId, WTSClientName, acNameBuff, nByteCount) then begin
                     aWTSClientname:=StrPas(PChar(acNameBuff));
                    WTSFreeMemory(acNameBuff);
                 end;

Problem: Der Computername des zugreifenden PCs ist nicht immer eindeutig. Manchmal haben Rechner den SELBEN Namen. Es entstehen Probleme.

Lösungsansatz: MAC Adresse auslesen -> geht aber nicht immer -> insb. wenn der zugreifende PC hinter einer Hardware Firewall steht!

Frage: Fallen Euch andere Lösungsansätze an, um zugreifende Rechner EINDEUTIG zu identifizieren wenn diese über RDP auf den Server zugreifen?

Danke für Input!

VG

Delphi.Narium 21. Sep 2021 16:39

AW: Remote Desktop: Rechner eindeutig identifizieren
 
WTSQuerySessionInformationA function (wtsapi32.h)

WTS_INFO_CLASS enumeration (wtsapi32.h)

WTS_CLIENT_ADDRESS structure (wtsapi32.h)
Code:
typedef struct _WTS_CLIENT_ADDRESS {
  DWORD AddressFamily;
  BYTE Address[20];
} WTS_CLIENT_ADDRESS, *PWTS_CLIENT_ADDRESS;
Wenn AddressFamily = AF_INET, enthält Address die IPV4-Adresse, bei AddressFamily = AF_INET6 bekommt man in Address die IPV6-Adresse.

Eventuell kannst Du dadraus ja einen Lösungsansatz bauen.

Der schöne Günther 21. Sep 2021 16:50

AW: Remote Desktop: Rechner eindeutig identifizieren
 
Ich hätte spontan einfach den Windows-Event-Viewer ausgelesen, da wird sowas doch geloggt.

Sinspin 21. Sep 2021 17:14

AW: Remote Desktop: Rechner eindeutig identifizieren
 
Wir verwenden den Name des Nutzers der an dem Rechner angemeldet ist. Das hat bisher immer gereicht.

Denkfehler 21. Sep 2021 17:21

AW: Remote Desktop: Rechner eindeutig identifizieren
 
Ergänzung: Neben den Problemen technischer Natur durch mehrfach benutzte, identische Rechnernamen gibt es auch ein lizenztechnisches: es handelt sich um Device Client Lizenzen, d.h. nur lizensierte Rechner dürfen die Anwendung auf dem Server starten. Ein Rechner bekommt die Lizenz anhand des Rechnernames zugeteilt - das ist dann aber nicht der Weisheit letzter Schluss. Ein weiteres Merkmal wäre gut - damit wären beide Probleme gelöst!

Aus diesem Grund fallen die Lösungsvorschläge Nutzername und IP leider raus.

Delphi.Narium 21. Sep 2021 17:42

AW: Remote Desktop: Rechner eindeutig identifizieren
 
Warum scheidet die IP aus?

Mehrere Rechner haben den gleichen Namen, aber unterschiedliche IP-Adressen. Andernfalls würde das nicht funktionieren.

Mehrere Rechner mit gleichem Namen mag in 'nem Netzwerk noch irgendwie funktionieren, ok ein Ping auf 'nen Rechnernamen wird dann eher ein Zufallsergebnis liefern. Mehrere Rechner mit gleicher IP in einem Netz dürfte aber kaum funktionsfähig sein.

Den Rechnernamen kann man dann zur Lizenzzuteilung nutzen, die IP um eindeutig einen bestimmten Rechner, von mehreren Rechnern gleichen Namens, zu identifizieren.

WTS_INFO_CLASS enthält auch noch 'ne WTSClientHardwareId, hilft die eventuell weiter?

HolgerX 21. Sep 2021 18:19

AW: Remote Desktop: Rechner eindeutig identifizieren
 
Hmm..

Solange Server und Clients im selben (Firmen-) Netz/Domäne sind und nicht übers Internet getrennt, dann sollte der Name eindeutig sein.

Sobald aber Internet mit Router im Spiel sind, dann hast Du schlechte Karten..

Der Router hat für alle daran hängende Clients die gleiche IP/MAC und Namen, und zwar den des Routers selber.
Da die Clients, wenn sie z.B. über verschiedene Router kommen auch alle den gleichen Clientnamen haben können könnte auch dadurch keine Eindeutigkeit erzeugt werden.

Zusätzlich gibt es noch das Problem der Kaskadierung, spich vom Client per RDP auf einen PC und von dort nochmals per RDP auf deinen Server..
Dann können sich alle Clients über diesen PC mit dessen Namen/IP/MAC an deinem Server anmelden. Somit müsstest Du Doppeltanmeldungen vom gleichen Client (hier der ZwischenPC) unterbinden..

Somit sieht es schlecht für eine Eindeutigkeit aus..
Das Problem haben auch alle Mobilapps..


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf