Forum: PC-Programmierung In python herausfinden ob und wann pc hochgefahren wurde


von Jesse J. (jessej)


Lesenswert?

Moin,
ich würd gern wissen wenn jemand meinen PC in meiner Abwesenheit 
hochfährt und wenn ja, für wie lange. Da ich python lern, würd ich das 
gern kombinieren und dort datetime objekte erhalten. Eine eventuelle 
manipulation von logdateien muss nicht berücksichtigt werden. Es geht um 
debian linux falls das wichtig ist.
Man kann sich per bash anscheinend mit "last -x" Zeiten ausgeben lassen 
(z.B. im ISO format) und dann in python parsen, aber bevor ich diese 
Ausgaben auseinanderpflück wollt ich fragen, ob das der richtige Weg 
ist?
Danke und Gruß
Jesse

von Nur_ein_Typ (Gast)


Lesenswert?

Jesse J. schrieb:
> ich würd gern wissen wenn jemand meinen PC in meiner Abwesenheit
> hochfährt und wenn ja, für wie lange. Da ich python lern, würd ich das
> gern kombinieren und dort datetime objekte erhalten. Eine eventuelle
> manipulation von logdateien muss nicht berücksichtigt werden. Es geht um
> debian linux falls das wichtig ist.
> Man kann sich per bash anscheinend mit "last -x" Zeiten ausgeben lassen
> (z.B. im ISO format) und dann in python parsen, aber bevor ich diese
> Ausgaben auseinanderpflück wollt ich fragen, ob das der richtige Weg
> ist?

Nunja, Du kannst da viele Dinge tun. Das vielleicht einfachste ist, ein 
Startskript anzulegen und per systemd zu aktivieren, das womöglich 
ungefähr so aussehen könnte:
1
#!/usr/bin/env python
2
import datetime as dt
3
4
if __name__ == '__main__':
5
    now = dt.datetime.now()
6
    # jetzt was mit "now" machen...

Diese Daten könnten dann in eine Logdatei unter /var/log/ eingetragen 
werden, und es ist sicherlich eine gute Idee, dieses Skript unter einer 
separaten Benutzerkennung laufen zu lassen und dafür zu sorgen, daß nur 
dieser Benutzer die Logdatei schreiben und womöglich auch lesen kann. 
Wenn Du noch etwas genauer erklären könntest, was Du wirklich 
bewerkstelligen willst, könnten wir Dir sicherlich auch besser helfen. 
;-)

von Noch _ein_Typ (Gast)


Lesenswert?

Der Angreifer kann auch von USB-Stick oder DVD booten und dann deine 
Platte mounten. Hinterlässt keine Spuren in deinen Logdateien.

von Jack V. (jackv)


Lesenswert?

Die Frage ist: worum geht es?

Wenn Fingerübung für Python: mach – löse das Problem auf möglichst viele 
verschiedene Arten. Vom Parsen der Ausgabe von last über direkte 
Auswertung der Timestamps in den Logs bis hin zu Scripten, die 
ihrerseits die Timestamps ins Log schreiben. Es ist nicht wichtig, wie 
effzient oder sinnvoll es am Ende ist – alles übt.

Wenn’s aber darum geht, den Rechner zu sichern: nutze Verschlüsselung. 
Dann nutzt auch das Booten via USB-Stick nichts.

von uptime (Gast)


Lesenswert?

/proc/uptime
   This file contains two numbers: the uptime of the  system  (sec‐
   onds), and the amount of time spent in idle process (seconds).

von Jack V. (jackv)


Lesenswert?

uptime schrieb:
> /proc/uptime
>    This file contains two numbers: the uptime of the  system  (sec‐
>    onds), and the amount of time spent in idle process (seconds).

Die Daten sind nicht persistent, so dass die Antwort nicht zur im 
Eingangsbeitrag beschriebenen Aufgabenstellung passt: es soll 
festgehalten werden, ob der Rechner während der Abwesenheit gestartet 
worden ist.

von Jesse J. (jessej)


Lesenswert?

Nur_ein_Typ schrieb:
> Wenn Du noch etwas genauer erklären könntest, was Du wirklich
> bewerkstelligen willst, könnten wir Dir sicherlich auch besser helfen

Jack V. schrieb:
> Die Frage ist: worum geht es?

Ich wollte einfach bei Bedarf mir per python auflisten lassen, wann der 
PC die letzten Tage hoch und wieder runter gefahren wurde. In meiner 
Familie sind auch keine Profihacker. :) Es geht mir eher um eine 
Fingerübung als um eine 100% Lösung.

Was ich nicht verstehe...ich habe den String aus dem Log extrahiert und 
kann daraus auch ein datetime objekt erzeugen, aber das scheint UTC zu 
sein (also mit +02:00 suffix). Wenn ich hingegen mit datetime.now() ein 
objekt erzeuge, wird es in lokaler Zeit angezeigt. Ich würde die Zeiten 
aus den ISO strings gerne auch lokal anzeigen, also hab ich folgendes 
versucht:
1
dateiso = datetime.datetime.fromisoformat('2021-10-29T18:30:15+02:00')
2
datelocal = dateiso.replace(tzinfo=datetime.timezone.utc).astimezone(tz=None)
3
datenow = datetime.datetime.now()
4
print(datelocal)
5
print(datenow)

Leider wird da immer noch UTC angezeigt:
1
2021-10-29 20:30:15+02:00
2
2021-10-30 16:10:24.640797

Was mache ich falsch?

von monty on the run (Gast)


Lesenswert?

https://pypi.org/project/psutil/

https://www.geeksforgeeks.org/python-script-to-check-pc-last-reboot-time/


import psutil
import datetime

# returns the time in seconds since the epoch
last_reboot = psutil.boot_time()

# converting the date and time in readable format
print(datetime.datetime.fromtimestamp(last_reboot))



----



>> Nunja, Du kannst da viele Dinge tun.



https://www.freedesktop.org/software/systemd/python-systemd/journal.html
https://www.freedesktop.org/software/systemd/python-systemd/index.html

von foobar (Gast)


Lesenswert?

> Man kann sich per bash anscheinend mit "last -x" Zeiten ausgeben lassen
> (z.B. im ISO format) und dann in python parsen, aber bevor ich diese
> Ausgaben auseinanderpflück wollt ich fragen, ob das der richtige Weg
> ist?

Ja, ist es.  Wenn du viel Langeweile hast, kannst du dir das auch selbst 
auseinanderfrickeln, siehe "man 5 wtmp".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.