Rechnername anhand des Benutzers finden

Hallo,

folgendes Problem:
In einem Netzwerk (Windows AD) habe ich einen gegeben Benutzernamen. Ich suche nun eine Möglichkeit zu dem Benutzernamen den oder die Rechner herauszufinden, an dem der Benutzer angemeldet ist.

Das so etwas möglich ist, zeigt der „Net Send“ Befehl dort kann man auch den Benutzernamen angeben und die Net Send Meldung erscheint auf dem Rechner an dem der Benutzer angemeldet ist.

Hat jemand eine Ahnung wie man den Rechnernamen ermitteln kann? Für Hinweise auf ein Tool oder eine Command-Line Befehl (oder eine genaue technische Beschreibung, wie das bei Net Send gemacht wird) wäre ich sehr dankbar.

Viele Grüße,
Thomas

Hallo,

Das so etwas möglich ist, zeigt der „Net Send“ Befehl dort
kann man auch den Benutzernamen angeben und die Net Send
Meldung erscheint auf dem Rechner an dem der Benutzer
angemeldet ist.

Eben nicht ganz… Du hast bei net send die Wahl an den Benutzer
oder aber an den Rechner (oder allen Usern in der Domäne) zu schicken.

Die eindeutige Zuordnung Rechner - Benutzer fehlt und wenn der
Benutzer nicht angemeldet ist, wirst Du nichts mitbekommen.
In vielen Netzwerken ist der Nachrichtendienst auch abgeschaltet,
da dieser Port von einem Virus ausgenutzt wurde.

Lade Dir mal die Sysinternals-Tools von Microsoft herunter.
Dort gibt es zwei Kommandozeilen-Tools, die dir weiterhelfen:

psloggedon.exe und logonssessions.exe

http://technet.microsoft.com/en-us/sysinternals/0e18…

Mit psloggedon kannst Du nach dem Benutzernamen im Netzwerk
suchen…

gruss,
vordprefect

Hat jemand eine Ahnung wie man den Rechnernamen ermitteln
kann? Für Hinweise auf ein Tool oder eine Command-Line Befehl
(oder eine genaue technische Beschreibung, wie das bei Net
Send gemacht wird) wäre ich sehr dankbar.

Viele Grüße,
Thomas

Wenn du Geld ausgeben möchtest und noch weitere Funktionen benötigst, empfehle ich dir LANDesk

Das so etwas möglich ist, zeigt der „Net Send“ Befehl dort
kann man auch den Benutzernamen angeben und die Net Send
Meldung erscheint auf dem Rechner an dem der Benutzer
angemeldet ist.

Nicht so ganz. Wenn der Benutzer auf zwei Rechnern angemeldet ist, erscheint die Meldung auf einemd er beiden Rechner, aber nicht auf beiden. Ich glaube mich erinnern zu können, dass die Meldung auf dem Rechner erscheint, der sich zuerst angemeldet hat. Meldest Du Dich von dem Rechner ab, der die Meldung empfangen hat, verschwinden nachfolgende Meldungen im Nichts, bis sich der Benutzer wieder irgendwo anmeldet.

Der Grund liegt in den Besonderheiten der Microsoft Namensregistrierung („Messenger“ Registrierung als Unique Registrierung), und ich erspare Dir die Details, es muss Dir reichen, das es designbedingt ist, und Microsoft das mehrfache Anmelden desselben Benutzers mit Bordmitteln niemals konsequent behandelt hat.

Hat jemand eine Ahnung wie man den Rechnernamen ermitteln
kann? Für Hinweise auf ein Tool oder eine Command-Line Befehl
(oder eine genaue technische Beschreibung, wie das bei Net
Send gemacht wird) wäre ich sehr dankbar.

Du kannst solch ein Tool einfach selber machen, wenn Du Login- und Logout Scripten programmieren kannst (benötigt eine AD Domäne).

Beim Login schreibst Du den Benutzernamen in eine Server-Datei, beim Logout entfernst Du ihn wieder. Wermutstropfen: abgestürzte oder in den Schlafmodus gegangene Rechner gehen Dir durch die Lappen, weil dann der Logout-Script nicht ausgeführt wurde. Die allfällige Auswerteroutine muss also damit rechnen.

…Armin

Das so etwas möglich ist, zeigt der „Net Send“ Befehl dort
kann man auch den Benutzernamen angeben und die Net Send
Meldung erscheint auf dem Rechner an dem der Benutzer
angemeldet ist.

Nicht so ganz. Wenn der Benutzer auf zwei Rechnern angemeldet
ist, erscheint die Meldung auf einemd er beiden Rechner, aber
nicht auf beiden.

Die Frage ist aber, ob der net send-Befehl beide Anmeldungen findet - wenn das der Fall wäre, könnte man die selbe Technik natürlich auch dazu verwenden, die Rechner zu identifizieren. Und es ist tatsächlich der Fall, nur taugt das von net send verwendete Verfahren (Microsoft + Netzwerk - naja…) allenfalls für Kleinstnetze. Es wird per Broadcast eine in TCP verpackte netbios-Nameservice-Anfrage „Wer ist ‚Benutzer‘? Bitte melden an…“ verschickt.

Das Problem dabei ist, dass der Broadcast natürlich an den lokalen Subnet-Grenzen seine Schranke findet. Man findet also nur Benutzer aus dem eigenen Segment, in gerouteten oder per VLan segmentierten Netzen scheitert der Befehl.

Gruß

Die Frage ist aber, ob der net send-Befehl beide Anmeldungen
findet - wenn das der Fall wäre, könnte man die selbe Technik
natürlich auch dazu verwenden, die Rechner zu identifizieren.

Nein, tut er nicht. Der gesuchte Messenger-Name Username ist per Definition Unique, d.h. dass nur ein einziger Computer ihn registrieren kann. Mit Subnetzen hat das nur insofern was zu tun als dass Computer in Subnetzen, die nicht mit einem WINS Server versehen wurden, den Namen fälschlicherweise doppelt registrieren können, weil der Check auf Doppelregistrierung an der Subnetzgrenze scheitert. Aber das ist ein Fehler im Netzaufbau, und nichts worauf man stolz ist. Sobald man die Subnetze korrekt per WINS verbindet wird die Doppelregistrierung verhindert.

Und es ist tatsächlich der Fall, nur taugt das von net send
verwendete Verfahren (Microsoft + Netzwerk - naja…)
allenfalls für Kleinstnetze.

So ist es. Es hat seine Wurzeln - wie übrigens der Netzwerkbrowser, der das „Inhaltsverzeichnis“ des Gesamtnetzes erstellen soll - im alten NETBIOS/NETBEUI Netz, das Microsoft seinerzeit von 3-Com eingekauft hat (3+ Open). Da NETBEUI nicht routingfähig war, gab es keine Probleme mit Subnetzen. Und eine Mehrfachanmeldung von Benutzern wurde als „seltener Sonderfall“ gar nicht erst berücksichtigt, angesichts der damaligen PC Preise eine durchaus richtige Annahme. Bis heute hat sich MS um dieses Problem, wie man am anderen Kollisionsfall „serverbasierte Profile“ deutlich sehen kann, nur halbherzig gekümmert. Jeder der mal versucht hat, ein Netz mit serverbasierten Profilen zu migrieren, in dem die Benutzer entweder PC+Terminal Server oder PC+Laptop (oder alle drei) mit dem selben Account gleichzeitig nützen, also zwangsweise doppelt angemeldet sind, kann ein leidvolles Liedchen darüber singen.

Es wird per Broadcast eine in TCP
verpackte netbios-Nameservice-Anfrage „Wer ist ‚Benutzer‘?
Bitte melden an…“ verschickt.

Fast ganz richtig. In einer subnetzgesegneten Umgebung fällt die Microsoft Broadcastauflösung auf die Nase, weshalb man seinerzeit mit dem Umstieg auf TCP flugs einen WINS Server erfunden hat. Sobald einer existiert wird per Unicast Paket im WINS gesucht. Broadcast wird nur noch als „Fallback“ mitgezogen für den Fall, dass der WINS Server mal ausfällt, man hat dann immerhin noch ein funktionierendes Subnetz, imemr noch besser als gar nnichts, dachte man sich wohl.

Das Messenger Problem hat damit aber nichts zu tun, Problemursache ist die „Unique“ Registrierung des Messenger-Namens. Nur ein einziger PC kann ihn besitzen, kommt ein zweiter, bekommt der eins auf die Finger, und geht der erste PC später aus dem Netz, bekommt der zweite das nicht mit, und verpennt dann seine Chance, den Namen, der jetzt eigentlich frei wäre, doch noch zu bekommen. Net Send versagt dann. Außer der Benutzer meldet sich neu an, aber wer tut das schon. Tut er es, entweder auf seinem zweiten Rechner oder woanders, kann der den Namen in Besitz nehmen, und net send geht wieder.

Ich bleibe dabei: man muss die Suche nach dem angemeldeten Benutzer, wenns funktionieren soll, selber programmieren. So schwer ist das Gott sei Dank auch nicht. Zwei simple Ansätze:

* Schleife über alle IP Adressen, und dann per WMI den angemeldeten Benutzer aus dem Rechner fischen. Bei C Netzen funktioniert das ganz prächtig, bei A und B Netzen durchaus auch noch, wenn man den Bereich er IP Adressen, die man abklappern will, einschränken kann, z.B. auf einen DHCP Range, der normalerweise viel kleiner ausfällt als alle Adressen. Unsicherheit: ich habe noch nie nachgesehen, ob die WMI Schnittstelle bei Rechnern, wo mehrere Benutzer angemeldet sind (Terminal-Server und Server mit Remote-Konsolen) auch brav eine Liste von Benutzern zurückgeben kann. Ich wage zu zweifeln, da Microsofties über die Sonderfälle des Lebens in der Regel lieber reden als sich darum zu kümmern.

* Wie schon angerissen: jeder anmeldende PC meldet sich auf einem Server, jeder abmeldende PC trägt sich brav wieder aus. Das klappt auch mit Terminal-Servern und Remote-Sessions wunderbar, benötigt aber irgendwo einen permanent laufenden Speicher wo man hinschreiben kann.

* Kombination aus Beiden: die serverstützte Liste enthält naturgemäß die anmeldenden Benutzer sehr zuverlässig, die abmeldenden dagegen nicht, wegen Abstürzen, Ruhezustand und Stecker-Raus Rüpelbenutzern. Also nimmt man die Liste der Computer, auf denen sich jemand angemeldet, aber nicht abgeleldet hat, als Eingabeliste für Lösung 1, statt alle IPs abzuklappern. Man bekommt dann eine subnetzübergreifende Liste aller Benutzer/Computer. Die Abfrageroutine muss dann nur noch damit rechnen, dass der eine oder andere Computer *doch* nicht mehr online sein könnte, damit die Suche nicht auf die Bretter geht wenn jemand den Stecker rauszieht. Eine Frage der Programmintelligenz und des Fehlerhandlings.

Ich habe solche Systeme schon erfolgreich implementiert. Normalerweise als programmierte Komponente in Support-Unterstützungssystemen, da die Supportler oft eine Möglichkeit suchen, schnell herauszufinden, wo ein bestimmter Benutzer angemeldet ist, weil sie ihre Remote-Help Konsole nur an den Rechnernamen, aber nicht an den Benutzernamen verbinden können.

Wers einfach aber funktionierend will und nicht gerade ein 10.000 User Netz verwaltet macht es über simple Serverdateien. Der Rest und Fans von Technik-Overkill bemühen dazu eine Datenbank.

…Armin

Die Frage ist aber, ob der net send-Befehl beide Anmeldungen
findet - wenn das der Fall wäre, könnte man die selbe Technik
natürlich auch dazu verwenden, die Rechner zu identifizieren.

Nein, tut er nicht.

Du hast recht. Ich hatte übersehen, dass der Netbios-„who has“ im Gegensatz zum Arp-„who has“ nicht die einzelnen Nodes, sondern eine mehr oder weniger statische Tabelle abfragt.

Gruss