Alle Netzwerk-Anmeldungen am Sambaserver anzeigen

Hallo Leute,

suche eine Möglichkeit in unserem Netzwerk alle User anzuzeigen, die am Netz angemeldet sind.
Das Ganze soll die Basis für ein Messaging Programm sein, mit dem ich dann an ausgewählte Plätze Infos senden kann.
Momentan lasse ich mir per cronjob (smbstatus -d) eine .txt Datei schreiben und formatiere die um…
Mühselig und Fehleranfällig…
Gibt es da eine einfachere bzw. bessere Lösung dafür ?
Für jede Idee wäre ich sehr dankbar,

Robert

Gibt es da eine einfachere bzw. bessere Lösung dafür ?
Für jede Idee wäre ich sehr dankbar,

Hab grad keinen Samba-Server zur Verfügung, um eine vernünftige Ausgabe zu erzeugen, aber wir können ja zum Spaß eine simulieren.

Nehmen wir an, der gesuchte String steht an zweiter Stelle in dieser Zeile:

WINCLIENT1 robert blabla
WINCLIENT2 stefan blublub

dann kannst du die Benutzernamen ganz einfach mit

smbstatus -d | awk '{print $2}'

herausknüseln.

Hilft das?
Stefan

Hilft das?
Stefan

Das ist ein sehr guter Anfang…
Hättest Du vielleicht noch eine Idee, wie ich das gleich in eine MySql Tabelle schreiben könnte ?
Am liebsten die beiden Spalten, die den angemeldeten User und die IP beeinhalten…

Danke,

Robert

Das ist ein sehr guter Anfang…

OK, dann machen wir das mal ein bisschen besser, weil ich jetzt auch mal auf meinen eigenen Samba-Server blicken kann.

Anstatt deines Befehls schlage ich smbstatus -b vor, das ergibt eine solche Ausgabe:

Samba version 2.2.1a
PID Username Machine Time logged in

-------------------------------------------------------------------
30932 axel axelpc Mon Feb 10 12:05:39 2003
20161 chris chrispc Tue Feb 4 12:03:50 2003
27929 stefan stefanpc Mon Feb 10 11:56:31 2003
28904 mike mikepc Mon Feb 10 11:59:18 2003

Von diesen Zeilen brauchen wir aber nur bestimmte, und zwar die mit den Usernamen. Dise haben alle ein gleiches Merkmal, nämlich die Zahl 200 in der Jahreszahl.

Aufgabe: wir nehmen nur die Zeilen, in denen 200 vorkommt und bauen daraum das Kommando:

smbstatus -b | grep 200 | awk '{print $2" "$3}'

Das erzeugt diese Ausgabe:

axel axelpc
chris chrispc
stefan stefanpc
mike mikepc

Aufgepasst: Nach der Jahrhundertwende 2100 funktioniert dein Programm nicht mehr, aber das ist ja noch 97 Jahre hin, und bis dahin wird sich das Problem anderweitig lösen :wink:

Die IP-Adresse ist schon etwas kniffliger. Die bekommt man nur mit deinem Kommando smbstatus -d. Auch hier werfe ich erstmal alle Zeilen weg, die mich nicht interessieren. Ich will die haben, die die Zahl 200 beinhalten, aber nicht die, die keine User-Informationen haben. Geht mit

smbstatus -d | grep 200 | grep -v / | awk '{print $2" "$6}'

ganz gut. Als Ausgabe wird das erzeugt:

mike (192.168.111.184)
axel (192.168.111.174)
chris (192.168.111.111)
stefan (192.168.111.152)

Bleiben die Klammern um die IP-Adresse. Hässlich, hässlich. Da ich keine Ahnung habe, mit welchem genialen Befehl man die wegbekommt (bestimmt irgendeine kranke regex, hallo Wissende!), mach ichs kompliziert, aber wirkungsvoll:

smbstatus -d | grep 200 | grep -v / | awk '{print $2" "$6}' | awk -F\( '{print $1" "$2}' | awk -F\) '{print $1}'

Das geht bestimmt einfacher. Egal, es funktioniert.

Hättest Du vielleicht noch eine Idee, wie ich das gleich in
eine MySql Tabelle schreiben könnte ?

Du wirst dir ein Programm in Perl oder PHP schreiben müssen, dem du die Ausgabe des obigen Kommandos übergibst. Nehmen wir an, dieses Programm hieße „smbusers.pl“, dann würde dein neues Kommando (au weia)

smbstatus -d | grep 200 | grep -v / | awk '{print $2" "$6}' | awk -F\( '{print $1" "$2}' | awk -F\) '{print $1}' | smbusers.pl

lauten. In deinem Programm gäbe es dann eine Programmzeile mit der SQL-Query

INSERT INTO usertabelle (login,ipaddr) VALUES ($1 $2)

(Achtung: Pseudocode!)

So, den Rest musst du selber machen, oder eines der anderen Kinder hier fragen - mehr weiß ich wirklich nicht.

Gruß,
Stefan

So, den Rest musst du selber machen, oder eines der anderen
Kinder hier fragen - mehr weiß ich wirklich nicht.

Gruß,
Stefan

Super, vielen Dank für die Mühe,

Robert