active directory - Bezug zwischen IP, hostname, User herstellen

  • Ein Hallo an die AD-Spezialisten ...

    Ich habe ein check_ping-Programm verfasst das mit einer TXT-Datei (nicht jedes kleine Netzwerk hat einen AD-Dienst laufen) mit IP|hostname arbeitet und diese Ziele periodisch kontrolliert. Bis dato habe ich diese Datei über einen IP-range Ping und dann vervollständigen mit hostname (passiert schon in check_ping) erstellt.

    Das möchte ich dahingehend erweitern/ändern, das bei Vorhandensein eines AD alternativ vorgeschlagen wird diese Datei aus dem AD zu erstellen (was mir anhand der Beispiele und der genialen UDF "AD.au3" (Jonathan Clelland, water etc.) möglich erscheint.

    NUR: wie bekomme ich zusätzlich den (letzten angemeldeten oder nicht angemeldeten) User in diese Liste?

    Die User bekomme ich aus dem AD aber wiederrum ohne Bezug zur IP bzw. hostname, IP bzw. hostname bekomme ich aus dem AD aber ohne Bezug zum letzten User ||.

    Gibt es einen Vorgehenspfad wie das (überhaupt) zu lösen ist?

    Danke an alle die beim Lesen nicht eingeschlafen sind:)

    LG

  • Bin derzeit im Urlaub. Melde mich nächste Woche mit meinen Gedanken dazu 😃

  • Hallo!

    Es gibt keinen direkten Bezug zwischen Computer und den Benutzer im AD. Beides sind einfach Objekte feinfacht ausgedrück die dort liegen. Der Computer meldet sich "unsichtbar" an, der User im normalfall interaktiv...

    Was geht, aber nicht so einfach ist: Im Eventlog vom DC steht wann sich wer wo angemeldet hat. Das zu analysieren ist aber eine echte Herausforderung, insbesonders wenn man das die Events vernünftig (Sicherheitsbasierend) einschaltet. Das hängt natürlich auch von der große des Netzes ab: habe ich 20 Clients, 5 Server und 2 DCs wird das kein Problem sein.

    Ich habe ca. 60.000 Clients in 7 Domänen und 2 Forrests mit einigen 1000 Server. Da kommen 1500 Request pro Sekunde herein.....das ist dann nicht mehr so einfach Abzufragen weil es einfach zu lange dauert (Ausgenommen es gibt einen Sicherheitsverstoß und es müssen die Daten wieder ausgewertet werden).

    Aber möglicherweise hilft dir ein andere Ansatz: Du hast einen Clientprogramm das bei Anmeldung des Benutzer läuft (Task) und der meldet die Information an einen Server (Datum, Uhrzeit, Hostname, IP, Username,....)
    Damit reduzierst Du die Datenmenge und hast ein schönes Logfile.

    lg
    Racer

  • Hi GML,

    leider kann man deinem Post nicht entnehmen, was du genau mit den Daten vorhast.

    Wir haben früher mal die Info benötigt, welcher User aktuell an welchem Client arbeitet. Hier wurden die entsprechenden Daten per Anmeldescript in eine Datenbank geschrieben.

    Falls ihr bereits Azure/ Intune benutzt, lassen sich dort meines Wissens auch diese Daten abgreifen.

    Gruß gmmg

  • Hallo

    es soll (wenn es ein AD gibt) so eine Datei erzeugt/erweitert werden (bildet die Basis für periodische Ping-Abfragen, das krieg ich noch hin):

    192.168.1.48|
    192.168.1.50|SYN-BACKUP
    192.168.1.51|
    192.168.1.59|
    192.168.1.60|PC-2253
    192.168.1.61|PC-2439
    192.168.1.63|PC-2503
    192.168.1.64|PC-2474
    192.168.1.65|PC-2527
    192.168.1.68|PC-2584

    Aber: diese hätte ich gerne um die letzte/derzeitige Benutzeranmeldung erweitert (da IPs bzw. Hostnamen jetzt nicht soo griffig sind bei der Fehlersuche):

    192.168.1.51||Mustermann
    192.168.1.59||Musterfrau
    192.168.1.59||Mustersohn
    192.168.1.60|PC-2253|Musterheinrich
    192.168.1.61|PC-2439|Musterfriedrich


    hab aber keine Möglichkeit gefunden (ohne jetzt immensen Aufwand zu betreiben mit ext. Programmen, log-Dateianalysen etc.) im AD die Benutzeranmeldung dazu zu finden.

    LG

  • Hi GML 👋 ,

    also ohne es ausprobiert zu haben, fand ich mit als ersten Suchtreffer folgende Powershell Variante:

    LastLogon (Letzter Login) eines Users im AD feststellen per Get-ADUser
    Gerade für Administratoren, die in einem Netzwerk mit einer AD-Struktur (Active Direcotry) arbeiten kann es wünschenswert sein, wenn sie relativ schnell
    www.windows-faq.de
    Code
    Get-ADUser -filter * -Properties "LastLogonDate" | select name, LastLogonDate

    Also falls ich dich richtig verstehe, könnte dir dies schon helfen. Wenn dem so ist, dann lässt sich die Umsetzung mit AutoIt (und PS) recht einfach machen.
    Vielleicht hilft es ja 🤞 . Angenehmen Tag euch allen noch 🌞 .

    Update:
    Interessant ist auch dieser Artikel dazu https://www.active-directory-faq.de/2021/01/lastlo…logontimestamp/ .

    Viele Grüße
    Sven

  • Ich verstehe Deine Frage so: Du willst wissen, welcher User sich auf welchem Gerät wann angemeldet hat. Vom Gerät willst Du IP und/oder Hostname wissen.
    Da es scheinbar keinen anderen Weg gab/gibt, haben wir das in der Firma über das Logon-Skript gelöst. Die von Dir gewünschten Informationen wurden in eine Datenbank geschrieben. Jeweils die letzten 5 Logins wurden gespeichert, ältere automatisch gelöscht.
    LastLogon und LasstLogonTimestamp bringen leider die IP/Hostname-Information nicht.

  • Guten Morgen.

    NIcht so ganz. WANN er angemeldet war ist mir wurst. Ich hätte halt nur gerne einen Namen zur IP/Hostname gehabt (für den Quicktip ..), ob der User jetzt gerade angemeldet ist oder wann er war wäre nicht so wichtig, hauptsache es war der Letzte (sooft wechseln hier die User nicht den PC das das relevant wäre).

    Aber danke an alle. Ich hab sowas schon beim suchen läuten gehört das da seltsamerweise (obwohl alles mögliche im AD gespeichert wird X/) dieser Bezug ohne Umwege nicht herzustellen ist.

    Ich werde mich an der PS-Einbindung versuchen, wie oben vorgeschlagen und dann sehen wie lange die Vervollständigung der Liste braucht. Eigentlich gehts ja nur um ein Netzwerksegment (254) was halt so mit ping erreichbar ist.

    Vielen Dank für die Vorschläge

    LG


    PS: ahhh, Mist. Gerade gesehen, Admin-Rechte erforderlich ||X/

    2 Mal editiert, zuletzt von GML (15. April 2024 um 09:44)

  • Schreibe dir ein kleines Tool, was dann am PC im Autostart oder Loginscript liegt und schreibe deine gewünschten Daten in eine Datenbank (MySQL /MS Access oder sonstige).

    Dann hast du diese immer aktuell in der DB vorliegen.

    Hier mal ein Beispiel:

    Die DB sieht dann so aus.

    Die UDF gibt es hier : https://www.autoitscript.com/forum/topic/17…ent-accdb-only/


    Gruß gmmg

  • An sich ein vernüpftiger Vorschlag gmmg, doch ich hatte das Szenario von GML etwas anders verstanden.
    Die Datenbank, um bei deinem Beispiel zu bleiben, darf doch dann nicht lokal auf dem Rechner des Users liegen sondern irgendwo im Netz des Unternehmes (nehme ich an).
    Wahrscheinlich meinst du dies auch, doch das Beispiel aus Zeile 8 $dbname = @ScriptDir & "\DB.accdb" verwirrt ein wenig.

    Also das AutoIt Skript oder das LoginScript muss Zugriff auf die Datenbank (auf eine API (um ein anderes Beispiel vorzuschlagen)) haben, damit dort die Einträge hinterlegt werden können. Ein wenig Gedanken muss man sich dabei jedoch über die Auth. machen, denn die Credentials liegen dann wahrscheinlich auch beim User (nicht im Klartext versteht sich). Oder wenn man über 'ne übliche API-Struktur geht, dann holt man sich mit seinen Windows-Auth-Daten erstmal 'nen Token und nutzt den zur Authentifizierung an der Datenbank (oder an der API) etc.

    Nachtrag:
    Beim nochmal drüber lesen fällt mir auf, dass es im Prinzip genau das ist was water im post #8 bereits geschrieben hat 😅 , was du allerdings verneint hast GML 🤔 ?

    Bin gespannt wie du dich entscheidest bzw. was du vorantreiben möchtest.
    Bei Umsetzungsproblemen komm bitte gern auf uns zurück - dies scheint kein Hexenwerk 🧙‍♀️ zu sein 😅 .

    Viele Grüße
    Sven

  • NIcht so ganz. WANN er angemeldet war ist mir wurst. Ich hätte halt nur gerne einen Namen zur IP/Hostname gehabt (für den Quicktip ..), ob der User jetzt gerade angemeldet ist oder wann er war wäre nicht so wichtig, hauptsache es war der Letzte (sooft wechseln hier die User nicht den PC das das relevant wäre).

    Um auswerten zu können, wer zuletzt an einem PC angemeldet war, brauchst Du die Informationen auf jeden Fall an einer zentralen Stelle (entweder in einer Datenbank oder, da Dich ja nur interessiert, wer zuletzt angemeldet war, auf einem Netzwerklaufwerk eine Datei mit dem Hostnamen als Dateiname sowie als Inhalt der Name des zuletzt angemeldeten Benutzers).
    Falls Du zur Datenbank tendierst, dann sollte das eine für Client-/Server-Anwendungen geeignete DB sein. Soweit ich weiß, fällt dann Access unter den Tisch.

  • SOLVE-SMART , ich selbst würde die DB auf ein Netzlaufwerk legen, aber per UNC Server Pfad im Script öffnen.

    Das Beispiel hoben habe ich mal aus meinen Scripten zusammen kopiert. :)

    Auch muss man bei @IPAddress schauen ob man die @IPAddress1, @IPAddress2 , @IPAddress3 oder @IPAddress4 benötigt.

    Ich habe das mal so auf die schnelle gelöst. geht sicherlich mit Schleife schöner.

    ;-----get IP -----------------------------------------------------------
    IF StringLeft(@IPAddress1,3) = "10." Then $ip = @IPAddress1
    IF StringLeft(@IPAddress2,3) = "10." Then $ip = @IPAddress2
    IF StringLeft(@IPAddress3,3) = "10." Then $ip = @IPAddress3
    IF StringLeft(@IPAddress4,3) = "10." Then $ip = @IPAddress4

    Die Umsetzung auf eine MySQL DB / Maria DB /MS-SQL ist auch kein Problem oder wie von water vorgeschlagen in eine Datei schreiben.

    Gruß gmmg

  • Ein echtes Danke an alle für ihre Überlegungen.

    Es ist leider so, das die Information (trotz AD) so leicht nicht zu beschaffen ist. Die Überlegungen bezüglich eines mitloggens bei der Anmeldung (netzwerkfähig und so) sind korrekt. Ich hab (in wirklich ganz kleinen Netzen) das mit einem echo xxx > dateiamnetzwerk.txt gelöst - die Holzhammermethode, funktioniert auch da die wahrscheinlichkeit gleichzeitiger Zugriffe gering sind, größere Netze brauchen da sicher was netzwerkfähiges zum Abspeichern (wie oben erwähnt ..).

    Ich habe mein Programmierverbrechensuch angefügt. Vielleicht kann jemand die Idee oder Fragmente davon irgendwo verwenden. :thumbup:Beigeschlossen sind auch zwei Programme für einen Segment-Ping um (so wie in der Hilfe beschrieben) eine ping_ziele.ini befüllen zu können. Das Programm sollte einfach eine quick & dirty Lösung sein und z.B. als Hilfestellung beim Herumpatchen dienen.


    Grüße LG

    PS: vergessen ... kompiliert und getestet mit V3.3.14.5, da in der letzten Version der Aufbau der Buttons laaangsam erfolgt.

    check_ping.7z

    Einmal editiert, zuletzt von GML (16. April 2024 um 10:29)

  • Eine Idee hätte ich noch: Du kannst einen Task erstellen mit der Bedingung "beim Anmelden" bzw. "beim Abmelden" ausführen.

    %computername% %username% und IP sollte sich leicht ermitteln lassen im Usermode.

    Ich habe für eine so ähnlichen Zweck mal eine Client und Server Programm geschriebe das via TCP/IP die Daten schickt und der Server schreibt dann alles in ein einfache Logfile (Datum, Uhrzeit: Daten,....)


    lg

    Racer