Pytanie:
Jak mogę rejestrować wszystkie powiadomienia?
sente
2015-09-30 12:28:07 UTC
view on stackexchange narkive permalink

Dropbox, PushBullet, Thunderbird i kilkanaście innych aplikacji tworzy powiadomienia. Czy można je rejestrować w sposób podobny do Uniksa?

Nie lubię tych drobnych wiadomości, które pojawiają się na kilka sekund, a następnie znikają bez śladu.

Zasadniczo chcę móc grepować plik, który zawiera wiersz dla każdego powiadomienia.

[Ta] (http://apple.stackexchange.com/a/142811/144046) odpowiedź i [ta] (http://apple.stackexchange.com/a/168503/144046) wskazują, że istnieje centrum powiadomień SQLiteBaza danych.Nie jest to jednak zwykły tekst.
Trzy odpowiedzi:
oystein
2015-12-31 23:56:37 UTC
view on stackexchange narkive permalink

Jak podał Arthur Hammer, https://apple.stackexchange.com/a/142811/37689 stwierdza, że ​​powiadomienia są przechowywane w bazie danych SQLite. Poniższy skrypt w języku Python powinien Cię rozpocząć:

  #! / Usr / bin / env pythonimport osimport reimport sqlite3 # Lokalizacja bazy danych centrów powiadomień w Yosemitetmp = os.environ ['TMPDIR'] conn = sqlite3.connect (tmp + '/../0/com.apple.notificationcenter/db/db') do powiadamiania w conn.execute (' SELECT * z powiadomień '): encoded_data = str (notyfikacja [-1]) # ostatnia pozycja clean = re.sub ('[^ \ w \ s-]', '', encoded_data) # usuń jakieś śmieszne rzeczy (fixme: usuwa za dużo?) sp = clean.split ('\ t') # Znajdź NSActualdeliverydate, treść wiadomości wydaje się zawsze następować po tym dla ix in range (len (sp)): if 'NSActualdeliverydate' w sp [ix]: break # Pomiń puste miejsca dla ix w zakresie (ix + 1, len (sp)): if sp [ix]! = '': break print 'notification', sp [ix] .replace ('_', '\ n'). strip () conn.close ()  

Możesz następnie przesłać to potokiem do pliku, a następnie grepować plik lub po prostu bezpośrednio grepować wyjście skryptu.

Dziękuję Ci.PushBullet, Dropbox i inne aplikacje, które badałem, niestety nie wydają się rejestrować odpowiednich danych.Zrzuciłem bazy danych sqlite i wyszukałem tokeny / ciągi znaków, o których chcę uzyskać informacje (takie jak tytuły powiadomień, pliki, źródła itp. - i nic nie wyszło.
Oscar Zhang
2019-09-23 10:27:37 UTC
view on stackexchange narkive permalink

Najpierw zlokalizuj pliki sqlite db i db-wal, w których znajdują się powiadomienia. Podobnie jak w mojejve, można go znaleźć za pomocą tego polecenia:

  lsof -p $ (ps aux | grep -m1 usernoted | awk '{print $ 2}') |awk '{print $ 9}' |grep 'db2 / db $' |xargs dirname
 

Następnie, jak wspomniał @greenhouse, skrypt MacFronsics jest dobrym wyborem do parsowania pliku db.O ile testuję, skrypt obsługuje też mojave.

Jeśli ktoś nie otrzyma najnowszego powiadomienia, najprawdopodobniej najnowsze powiadomienia nie będą znajdować się w głównej bazie danych.Bezpośrednia analiza pliku db zakończyłaby się starymi powiadomieniami.Jeśli chcesz otrzymywać najnowsze powiadomienia, pamiętaj o migracji rekordu w pliku db-wal (zapis dziennika AHead) do bazy danych.

greenhouse
2018-07-17 05:21:31 UTC
view on stackexchange narkive permalink

Odpowiedź @ oystein jest świetna, ale myślę, że działa tylko w przypadku yosemite, ponieważ sqlite db dla high sierra to inny model db ...

więc znalazłem to łatwe narzędzie ... (które działa doskonale dla high seirra) https://github.com/ydkhatri/MacForensics/blob/master/macNotifications.py

po prostu uruchom ze ścieżką wejściową i wyjściową ścieżki db .csv, którą chcesz utworzyć

uwaga: aby znaleźć ścieżkę bazy danych centrum powiadomień, wyświetl to ... https://stackoverflow.com/a/26777027

glhf!



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...