Ereignisprotokoll der FRITZ!Box auf Linux-Server sichern

Hallo ,
ich bin Uli, dies ist mein erster Post hier, ich hoffe Alles richtig gemacht zu haben- sonst bitte sagen ich gelobe Besserung.

Eurer Diskussion folgend (die ich nicht komplett verstanden habe) habe ich mich an den beiden u.g. skripten versucht wobei das erste Skript mit folgendne Fehlern abbricht (die ich auch nicht alle verstehe)
Bash:
/fritz_syslog.sh: line 3: var: command not found
./fritz_syslog.sh: line 5: syntax error near unexpected token `('
./fritz_syslog.sh: line 5: `async function getFritzboxLogs(){'

Beim 2. Skript läuft es soweit durch doch ich erhalte die Fehlermeldung:
Bash:
 eventsdump: command not found
Mein OS auf dem Logserver ist alma-linux9, der Befehl eventsdump ist mir nicht bekannt , was muss ich instalieren damit dieses Kommando bekannt wird? Welche Fehler habe ich bei dem 1. Skript gemacht und wie mus ich das korrekt schreiben?

Schonmal vielen Dank für eure Hilfe
Uli


 
1. Die wenigsten (sicherheitsbewußten) Benutzer werden sich irgendwelche Code-Beispiele über pastebin.com laden - warum kann man (bzw. kannst Du) die nicht direkt hier im Forum in entsprechenden CODE-Blöcken mit uns teilen?

2. Wer tatsächlich nur die Einträge im Event-Log der FRITZ!Boxen auslesen und dabei einen Shell-Dialekt verwenden will, der kann/sollte sich das hier mal genauer ansehen:


Damit kann man (mittels der Operation devicelog, s. Dokumentation unter dem o.a. Link) die Nachrichten per TR-064 auslesen und danach entsprechend weiterverarbeiten - gerade für "beginners" eine ziemliche Erleichterung, weil man sich auf das eigentliche Ziel konzentrieren kann und sich nicht selbst um die korrekte Behandlung der TR-064-Kommunikation (die mittels SOAP-Protokoll erfolgt, wobei das P in SOAP eigentlich schon für Protocol steht und das somit ein Pleonasmus ist) kümmern muß (dafür muß man sich halt in eine fremde Library einarbeiten und gerade für eine (kompakte) Dauerlösung könnte auch diese schon "zu gewaltig" sein, auch weil sie (m.W.) nicht unbedingt POSIX-kompatibel ist).
 
Hallo Peter Pawn,
um deine Frage " warum kann man (bzw. kannst Du) die nicht direkt hier im Forum in entsprechenden CODE-Blöcken mit uns teilen?" zu beantworten , weil ich nicht so schlau bin eure Wünsche aud meiner Kristallkugel vorherzusehen. In den meisten Foren wird ausdrücklich um die Verwendung von pastebin gebeten .

Dieser eisfair server ist ja sehr umfangreich , kan ich den als VM (kvm) betreiben? Wass hat der so an Hardware-Requirements?
Konnte ich in der Beschreibung nicht finden sorry. Nur diese Mindestanforderrungen
  • CPU: Pentium 66
  • Hauptspeicher: 32 MB, besser 64 MB
  • Massenspeicher: mindestens 120 MB Festplattenplatz, später auch CompactFlashTM

DANKE

Uli
Achso hier sind die Dateiblöcke (Skripte)
Bash:
1 #!/bin/bash
  2
  3 var lastQueryLog = undefined;
  4
  5 async function getFritzboxLogs(){
  6     var command = {
  7         "service": "urn:dslforum-org:service:DeviceInfo:1",
  8         "action": "GetDeviceLog",
  9         "params": {"NewDeviceLog":""}
 10     };
 11
 12     var commandID = 'tr-064.0.states.command'/*command*/;
 13     var commandResultID = 'tr-064.0.states.commandResult'/*commandResult*/;
 14
 15     console.log( "Query Fritzbox Log");
 16
 17     setState(commandID,JSON.stringify(command));
 18     var resultJSON = (await getStateAsync(commandResultID)).val;
 19     var resultObj = JSON.parse(resultJSON);
 20     var result = resultObj.NewDeviceLog;
 21
 22     var resArray = result.split(/\r\n|\r|\n/);
 23     resArray.reverse();
 24
 25     for(var msg of resArray){
 26         //console.log(msg);
 27         if (lastQueryLog != undefined && lastQueryLog.includes(msg)) {
 28             console.log( "Alter Log: "+msg);
 29         } else {
 30                 console.log("Neuer Log: "+msg);
 31                         // Hier muss dein Filter rein
 32                         // sendMsgTo....
 33         }
 34     }
 35     lastQueryLog = resArray.slice();
 36
 37 }
 38
 39
 40 schedule('*/3 * * * *', async function () {
 41     getFritzboxLogs();
 42 });
 43 getFritzboxLogs();
 44


und

Bash:
1 #!/bin/sh
  2
  3 #Datei zum Zwischenspeichern des eventsdump
  4 touch /var/tmp/eventsdump.log
  5
  6 # erstes Auslesen nach dem Boot der Box und merken des letzten Eintrages
  7 eventsdump | logger $1
  8 lastmessge=$(testvalue /var/.ar7events 4 8)
  9
 10 while [ 1 == 1 ]
 11 do
 12
 13 #warten, bis neue Eintraege vom System erzeugt wurden
 14 inotifywait -e close_write /var/.ar7eventsdir
 15 newmessages=$(testvalue /var/.ar7events 4 8)
 16 ##################################Experimental############################################################
 17 binfile=/var/.ar7events
 18 tmpfile=/var/tmp/eventsdump.log
 19 lastmessage=-1
 20
 21 # saves work to change the call, if the format isn't stable and is more intuitive while reading later
 22 get_message_count()
 23 {   
 24     local num
 25     num=$(testvalue $binfile 4 8 2>/dev/null)
 26     [ $? -ne 0 ] && num=0
 27     echo $num
 28 }
 29
 30 while true; do
 31     [ $lastmessage -ge 0 ] && inotifywait -e close_write $binfile 2>/dev/null 1>&2 || last_message=0
 32     [ $? -ne 0 ] && exit # usally the monitored file has vanished and we want avoid looping in case of an error
 
 
 
 while true; do
 34         messages=$(get_message_count)
 35         eventsdump >$tmpfile
 36         new_messages=$(get_message_count)
 37         [ $new_messages -eq $messages ] && break
 38         sleep 1 # let's settle one second, if there're more messages queued
 39     done
 40     messages=$(( $messages - $lastmessage ))
 41     [ $messages -gt 0 ] && sed -n -e "1,${messages}p" $tmpfile | sed -n '1!G;h;$p' | logger
 42 done
 43 ################################################################################################
 44
45
 46
 47
 48
 49
 50
 51
 52
 53
 54 # Inhalt des Ereignislog zwischenspeichern (moeglichst direkt nach dem testvalue)
 55 eventsdump > /var/tmp/eventsdump.log
 56
 57 # Anzahl der neuen Ereignisse bestimmen
 58 #theoretisch koennten hier Nachrichten in der Mitte verloren gehen, wenn 'newmessages'
 59 #nicht mehr aktuell ist, weil zwischen 'testvalue' und 'eventsdump' noch neue Events geschrieben wurden
 60 message_count=$($(newmessages) - $(lastmessge))
 61
 62 # nur die neuen Eintraege mit 'sed' herausfiltern und an den logger weiterreichen
 63 cat /var/tmp/eventsdump.log | sed -n -e "1,${message_count}p" | logger $1
 64 lastmessge=$(newmessages)
 65
 66 done
 
Zuletzt bearbeitet:
In den meisten Foren wird ausdrücklich um die Verwendung von pastebin gebeten .

Leider wird mein Link aber tatsächlich (mittlerweile) falsch aufgelöst - nimm einfach diesen:


Der weiter oben stehende sollte eigentlich der ganz unten auf dieser Seite angebrachte Link zur Dokumentation dazu sein, offenbar ist da eben noch eine merkwürdige "session id" (als pid) enthalten und damit funktioniert dort kein "deep link" direkt zur Dokumentation.

Alles andere sollte die Dokumentation dort klären können - es funktioniert auch mit anderen Distros.

Das erste Skript in #103 ist dann auch bestimmt KEIN bash-Code (das sieht eher nach JavaScript bzw. ECMAScript aus), was die zuvor gezeigten Fehler beim Aufruf als Shell-Skript erklärt.
 
Hallo Pater Pawn,

DANKE für die Infos werde mir den eisfair mal in eine VM installieren und dann schauen . Was nimmt man denn nun anstatt pastebin?

Gruss

Uli
 
Wenn es um solche Code-Snippets wie bei Dir geht, dann funktioniert das doch ganz gut mit den CODE-Tags, oder? Obendrein hat das den Vorteil, daß direkt hier geteilter Code auch nach mehreren Jahren, wenn irgendwelche anderen Plattformen längst bei sich durchgewischt haben, immer noch verfügbar ist.

Handelt es sich um Code, der von anderen nachgenutzt werden soll, KANN man den ja (sofern man möchte, es gibt dazu aber eben KEINE Verpflichtung und je nach Größe macht es häufig auch wenig Sinn, WEIL (meine) Erfahrung zeigt, daß sich die Leute dann eher auf solche Anhänge stürzen, anstatt den "Begleittext" ordentlich zu lesen und auch wirklich zu verstehen) auch noch zusätzlich als Dateianhang bereitstellen.

Handelt es sich um Code, den man Schritt für Schritt weiterentwickeln will, ist ein Repository einer Versionsverwaltung die bessere Wahl und dann TATSÄCHLICH auch ein Link dorthin. Sicherlich gibt es da auch eine größere Anzahl von Alternativen (z.B. Codeberg oder auch die hier besprochenen: https://www.heise.de/tipps-tricks/GitHub-Alternativen-Die-5-besten-Seiten-4349610.html), aber da kümmert sich dann auch jemand um gemeldete Gefahren (wie Malware oder feindlich übernommene Repositories), was bei Pastebin eher ungewöhnlich ist.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.