Wie kann Mac OS X Details zu der URL speichern, von der eine Datei heruntergeladen wurde?

8

WRT dieses Thema Was soll ich mit com.apple.quarantine tun? Ich möchte wissen, wie OS X diese Informationen im Feld @ lernen und speichern kann. Ich suche nicht nach einer Möglichkeit, diese Funktion zu deaktivieren, sondern nach einem Code (oder Pseudocode, einer Idee, was auch immer) bezüglich der Implementierung dieser Sache. Vielen Dank im Voraus.

Raffaele Di Fazio
quelle

Antworten:

6

Wie Daniel erwähnt hat, kann der Browser die Quell-URL (und auch den Referrer) einer heruntergeladenen Datei im erweiterten Attribut speichern com.apple.metadata:kMDItemWhereFroms.

Zuerst hat Apple dies zu Safari für Mac OS X 10.4 hinzugefügt, dann wurde es zu Chrome / Chromium hinzugefügt [Problem 22289] , und es gibt eine ausstehende Verbesserungsanforderung, um es zu Firefox hinzuzufügen [Bug 337051] .

Informationen zum eigentlichen Code zur Implementierung finden Sie im Chromium-Patch .

mark4o
quelle
Schöne Geschichte :-) Bei der Verwendung von Safari wird der Referrer jedoch nicht angezeigt (oder zumindest nicht in den neuen Downloads, bei denen ich versucht habe, festzustellen, ob ich etwas verpasst habe). Vielleicht sieht es anders aus, wenn Sie mit der rechten Maustaste klicken und herunterladen oder wenn ein Download automatisch startet? (Zum Beispiel senden einige Browser den Referrer auch nicht, wenn Links in neuen Fenstern geöffnet werden.)
Arjan
Ah, Sie haben Recht, mdlszeigt es für Downloads, die automatisch starten. Und Finders Get Info zeigt dies als durch Kommas getrennte Liste, die ich nicht bemerkt habe!
Arjan
6

Nach dem Herunterladen einer Datei zeigt das Ausführen xattr filean, was der Browser in den erweiterten Attributen gespeichert hat:

xattr mydownload.gz
com.apple.metadata: kMDItemWhereFroms
com.apple.quarantine

Als nächstes weitere Details:

xattr -p com.apple.quarantine mydownload.gz 
0000; 4cee9d4b; Safari; 24064D6B-9854-46BC-AF73-5DE5F8042D0B | com.apple.Safari

xattr -p com.apple.metadata: kMDItemWhereFroms mydownload.gz 
62 70 6C 69 73 74 30 30 A1 01 5F 10 24 68 74 74
70 3A 2F 2F 73 75 [und so weiter]

... oder in lesbarem Format:

mdls -name kMDItemWhereFroms mydownload.gz
kMDItemWhereFroms = (
    "http: // some-url"
)

Sie können diese (oder jedes gewünschte Attribut) auch selbst festlegen :

xattr -w ein Name ein Wert mydownload.gz

Das Folgende funktioniert auch, obwohl es zu unterschiedlichen Ergebnissen führt, wenn die obigen Befehle erneut ausgeführt werden:

xattr -w com.apple.metadata: kMDItemWhereFroms http://example.com mydownload.gz

Und für das com.apple.quarantineAttribut laut verstehen :

In der Regel bestehen die Quarantänedaten aus einem Satz von 4 durch Semikolons getrennten Werten (einem Satz von Dezimalstellen mit unbekanntem Zweck - normalerweise 0000, einer 8-stelligen undurchsichtigen ID , dem Namen der Anwendung, die die Quarantänedatei erstellt hat, und der UTI der Anwendung (Uniform Type Identifier) ​​mit vorangestelltem Pipe-Symbol)

Für zwei verschiedene Dateien, die mit Mozilla FireFox heruntergeladen wurden, sieht dies beispielsweise folgendermaßen aus:

com.apple.quarantine: 0000;4b392bb2;Firefox;|org.mozilla.firefox
com.apple.quarantine: 0000;4b38d820;Firefox;|org.mozilla.firefox

Mit den Ordneraktionen von Automator können Sie solche Befehle für neue Dateien in einem bestimmten Ordner ausführen, wenn Sie danach suchen.

Arjan
quelle
4

Diese Informationen werden in sogenannten "erweiterten Attributen" gespeichert. John Siracusa hat einen ausgezeichneten Artikel über erweiterte Attribute, als sie erstmals in OS X 10.4 eingeführt wurden: http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/7 .

Es scheint, dass es keine Manpage mehr für das Befehlszeilentool 'xattr' gibt, aber 'xattr -h' sollte grundlegende Hilfe anzeigen.

In /usr/include/sys/xattr.h ist eine API auf POSIX / BSD-Ebene verfügbar, die C-Funktionen wie getxattr (), setxattr (), removexattr (), listxattr () und deren FILE-basierte Cousins ​​definiert. (Diese Befehle haben im Gegensatz zu 'xattr (1)' Manpages).

NSGod
quelle
3

Es wird von der Anwendung festgelegt, die die Datei herunterlädt. Keine magische Download-Erkennung, nur ein Attribut, das von der Download-Anwendung für die heruntergeladene Datei festgelegt wurde.

Ich habe gerade eine Zip-Datei mit wgetGoogle Chrome, Firefox und Safari wgetheruntergeladen , und wie erwartet hat der Download keine erweiterten Attribute, die Browser-Downloads haben, da sie diese Funktion kennen. Interessanterweise hat der Firefox-Download die Quarantäne festgelegt, aber vergessen com.apple.metadata:kMDItemWhereFroms, die Informationen festzulegen , unter denen sich die heruntergeladene Datei ursprünglich befand (ihre URL). Safari und Chrome setzen beide wgetnicht.

Daniel Beck
quelle