www.fabiankeil.de/blog-surrogat/2006/01/26/firefox-user-agent-generator.html
Trotz anders lautenden Gerüchten sind weder Privoxy noch uagen.pl
für Bugs in Online-Shops verantwortlich.
Siehe dazu auch: Kleiner Realitätsabgleich
für die OXID eSales GmbH.
uagen generiert einen zu einer beliebigen Firefox-Version passenden User-Agent und
schreibt ihn in eine Privoxy-Action-Datei. Das lästige User-Agent-Ändern kann damit über
cron automatisiert werden.
Bei der Verwendung von Tor ändert sich die vom Server wahrgenommene IP zwar etwa alle zehn Minuten, die von Privoxy gefälschte Browser-Kennung bleibt jedoch konstant und kann, je nach Wahl, zur pseudonymen Benutzer-Identifizierung benutzt werden.
Es gibt das Konzept, einfach den User-Agent von einer Firefox-Windows-Version zu nehmen, also den gleichen User-Agent wie tausend andere zu benutzen und in der Menge zu verschwinden. Damit erhöht man aber gleichzeitig die vom Server-Betreiber gemessene Zahl der Windows-Nutzer – schlecht für das Karma.
Besser ist es, den User-Agent regelmäßig zu ändern, bei der Wahl des vorgegebenen Betriebssystems das Karma aber nicht zu gefährden. Nebenbei sorgt man so für eine bessere User-Agent-Mischung im Server-Logfile, in der auch Nicht-Windows-Benutzer ohne manipuliertem User-Agent weniger auffallen – gut für das Karma.
Seit Version 0.3 kann uagen Privoxy auch dazu veranlassen, den
Accept-Language-Header passend zum User-Agent zu fälschen, dazu wird zusätzlich
die Privoxy-Aktion
hide-accept-language benötigt (in Privoxy-Versionen ab 3.0.5 beta bereits enthalten).
Standardmäßig wird der Accept-Language-Header zwar nicht mit protokolliert,
doch technisch ist es problemlos möglich und er kann auch ohne Protokollierung zur Erkennung
von gefälschten User-Agents genutzt werden.
Eine Reihe von Parametern können uagen auf der Kommandozeile übergeben werden,
--help zeigt welche:
fk@TP51 ~ $uagen --help uagen 1.0.6 Copyright (C) 2006-2007 Fabian Keil <fk@fabiankeil.de> http://www.fabiankeil.de/sourcecode/uagen/ Options and their default values if there are any: [--action-file /etc/privoxy/user-agent.action] [--action-injection] [--browser-release-date 20070301] [--browser-revision 1.8.1.2] [--browser-version 2.0.0.2] [--clean-prefs-file] [--help] [--language-overwrite en-AU,en-GB,en-CA,en-NZ,en-US,en-ZW,es-ES,de-DE,de-AT,de-CH,fr-FR,sk-SK,nl-NL,no-NO,pl-PL] [--logfile /var/log/uagen.log] [--loop] [--no-action-file] [--no-hide-accept-language] [--no-logfile] [--prefs-file] [--quiet] [--silent] [--sleeping-time 5] [--version] see "perldoc /home/fk/scripts/uagen.pl" for more information
Es gibt keine Pflicht-Optionen.
uagen kann von Hand aufgerufen werden:
fk@TP51 ~ $uagen --action-file /usr/jails/privoxy-jail/usr/local/etc/privoxy/user-agent.action --no-logfile User Agent: Mozilla/5.0 (X11; U; NetBSD i386; de-DE; rv:1.8.0.6) Gecko/20060813 Firefox/1.5.0.6
Oder auch über cron:
fk@TP51 ~ $grep uagen /etc/crontab */5 * * * * privoxy /usr/local/bin/uagen --action-file /usr/local/etc/privoxy/user-agent.action
Den User-Agent alle fünf Minuten zu ändern ist etwas übertrieben, verursacht anderseits aber auch keine irgendwie spürbare Last und erleichtert das Testen. Firefox ruft News-Feeds etwa einmal pro Stunde ab, falls man News-Feeds in Firefox nutzt, sollte das User-Agent-Wechsel-Intervall also darunter liegen.
Im Normallfall schreibt uagen die Action-Datei einmal und beendet sich anschließend,
kann aber über die Option --loop in eine Schleife geschickt werden. Sinnvoll
für kurze Tests, oder falls cron nicht verfügbar ist.
Momentan protokolliert uagen jeden Wechsel in /var/log/uagen.log,
ebenfalls eine Testerleichterung, ansonsten recht überflüssig:
fk@TP51 ~ $tail -f /var/log/uagen.log uagen.pl (2006/01/25 19:20) User Agent: Mozilla/5.0 (X11; U; OpenBSD amd64; es-ES; rv:1.8) Gecko/20060118 Firefox/1.5 uagen.pl (2006/01/25 19:25) User Agent: Mozilla/5.0 (X11; U; NetBSD sparc64; en-GB; rv:1.8) Gecko/20060116 Firefox/1.5 uagen.pl (2006/01/26 11:30) User Agent: Mozilla/5.0 (X11; U; FreeBSD sparc64; es-ES; rv:1.8) Gecko/20051230 Firefox/1.5 uagen.pl (2006/01/26 11:35) User Agent: Mozilla/5.0 (X11; U; FreeBSD alpha; es-ES; rv:1.8) Gecko/20060102 Firefox/1.5 uagen.pl (2006/01/26 11:40) User Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; de-DE; rv:1.8) Gecko/20060110 Firefox/1.5 uagen.pl (2006/01/26 11:45) User Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; de-DE; rv:1.8) Gecko/20060108 Firefox/1.5 uagen.pl (2006/01/26 11:50) User Agent: Mozilla/5.0 (X11; U; Linux i586; es-ES; rv:1.8) Gecko/20051208 Firefox/1.5 uagen.pl (2006/01/26 11:55) User Agent: Mozilla/5.0 (X11; U; Linux i686; de-DE; rv:1.8) Gecko/20051202 Firefox/1.5 uagen.pl (2006/01/26 12:00) User Agent: Mozilla/5.0 (X11; U; OpenBSD sparc64; de-DE; rv:1.8) Gecko/20051212 Firefox/1.5 uagen.pl (2006/01/26 12:05) User Agent: Mozilla/5.0 (X11; U; Linux i686; de-DE; rv:1.8) Gecko/20060119 Firefox/1.5 uagen.pl (2006/01/26 12:10) User Agent: Mozilla/5.0 (Macintosh; U; 68K Mac OS X Mach-O; en-US; rv:1.8) Gecko/20051209 Firefox/1.5 uagen.pl (2006/01/26 12:15) User Agent: Mozilla/5.0 (Macintosh; U; 68K Mac OS X Mach-O; de-DE; rv:1.8) Gecko/20051218 Firefox/1.5 uagen.pl (2006/01/26 12:20) User Agent: Mozilla/5.0 (X11; U; Linux i586; de-DE; rv:1.8) Gecko/20051211 Firefox/1.5 uagen.pl (2006/01/26 12:25) User Agent: Mozilla/5.0 (X11; U; OpenBSD sparc64; de-DE; rv:1.8) Gecko/20051213 Firefox/1.5
Die Zeile:
/var/log/privoxy/privoxy.log privoxy:privoxy 640 30 100 * JB /var/run/privoxy.pid
in /etc/newsyslog.conf sorgt für regelmäßiges Rotieren der Log-Datei.
In Privoxys Konfigurations-Datei sollte die von uagen erzeugte Action-Datei
hinter standard.action und vor user.action
eingebunden werden, so können in user.action noch Ausnahmen festgelegt werden.
actionsfile standard # Internal purpose, recommended actionsfile default # Main actions file actionsfile user-agent # Random Firefox User agent actionsfile user # User customizations
uagen unter Windows
Unter Windows ist standardmäßig weder Perl noch cron verfügbar,
beides kann aber über Cygwin nachinstalliert werden.
Zwingend erforderlich ist für uagen nur ein Perl-Interpreter.
Bevor uagen getestet wird, sollte sichergestellt werden, dass der Perl-Interpreter
korrekt installiert ist. Dazu öffnet man über Start/Ausführen/cmd die Windows-Kommandozeile,
gibt dort den Pfad zum Perl-Interpreter ein und hängt den Parameter -e
gefolgt von einem beliebigen Perl-Programm, zum Beispiel 'print "Test erfolgreich\n"', an.
Wurde Cygwin nach E:\Programme\cygwin
installiert, könnte die Verfügbarkeit von Perl mit:
E:\Programme\cygwin\bin\perl.exe -e 'print "Test erfolgreich\n"'
getestet werden. Erscheint keine Fehlermeldung, steht der Nutzung von uagen
nichts mehr im Wege, anstelle von -e 'print "Test erfolgreich\n"' werden dazu
der volle Pfad zu uagen und anschließend die uagen-Parameter
eingegeben. Zum Beispiel
E:\Programme\cygwin\bin\perl.exe E:\Programme\cygwin\bin\uagen.pl --action-file /cygdrive/e/Programme/privoxy-cvs/user-agent.action
Wichtig ist, dass Cygwins Perl-Interpreter Verzeichnisse korrekt mit / trennt,
auf die Laufwerks-Metapher verzichtet und den Unterschied zwischen Groß- und Kleinbuchstaben kennt.
Aus E:\Programme\privoxy-cvs/user-agent.action
wird /cygdrive/e/Programme/privoxy-cvs/user-agent.action
.
Falls keine Fehlermeldung erscheint, wurde die Action-Datei erfolgreich geschrieben und
kann in Privoxy's Konfigurations-Datei ergänzt werden, anschließend sollte sie unter
http://config.privoxy.org/show-status
aufgelistet werden.
Falls noch eine ungepatchte Privoxy-Version 3.0.3 genutzt wird, beendet sich Privoxy mit
einer Fehlermeldung, da die Aktion hide-accept-language nicht bekannt ist.
Deren Generierung kann über die Option --no-hide-accept-language verhindert werden,
die einfach an die anderen uagen-Parameter angehängt wird.
Die so erzeugte Action-Datei bereitet auch unter Privoxy 3.0.3 keine Probleme mehr, ein Privoxy-Update wäre natürlich die bessere Lösung, Privoxy 3.0.3 ist stark veraltet.
Wird zusätzlich der Parameter --loop genutzt, wird die Action-Datei
alle fünf Minuten neu generiert, die Pause lässt sich über --sleeping-time X
verändern.
Wenn die richtige uagen-Kommandozeile gefunden ist, kann man sie
über eine Desktop-Verknüpfung klickbar machen. Dazu wird mir der rechten
Maustaste auf den Desktop geklickt, und Neu/Verknüpfung
ausgewählt.
Im daraufhin erscheinenden Assistenten
wird nicht auf den Durchsuchen
-Button
geklickt, sondern die gesamte uagen-Kommandozeile als Speicherort des Elements
einkopiert. Nach dem Druck auf den Weiter-Button kann eine beliebiger Name der Verknüpfung
festgelegt werden, anschließend ist uagen direkt über den Desktop erreichbar.
Um uagen automatisch zu starten, kann die Verknüpfung zusätzlich
in das Autostart-Verzeichnis (Start/Programme/Autostart
) gezogen werden.
general.useragent.override ändern
Seit Version 1.0.5 kann uagen die generierte Browser-Kennung auch
in Mozilla-prefs-Dateien speichern. Dazu gibt es zwei neue Parameter: --prefs-file
und --clean-prefs-file.
Über --prefs-file wird der Speicherort der prefs-Datei angegeben, bei Firefox auf Unix-Derivaten
ist das im Normalfall ~/.mozilla/firefox/*.default/prefs.js, vorausgesetzt man möchte das
Standard-Profil ändern. Über die zusätzliche Option --clean-prefs-file wird die Kennung wieder
entfernt. Nötig ist das nur, wenn die Original-Kennung wieder hergestellt werden soll.
Direktes Editieren der prefs-Datei hat den Vorteil, auch bei verschlüsselten Verbindungen zu wirken,
bei denen Privoxys Filter-Funktionen umgangen werden. Es hat den Nachteil, dass die Datei nur beim
Start des Browsers interpretiert wird, spätere Änderungen werden ignoriert. --prefs-file
ist also lediglich als Ergänzung gedacht, nicht aber als Ersatz für die Erzeugung der Privoxy-Action-Datei.
Am Kopf von Firefox' prefs-Datei wird ausdrücklich vor Veränderungen im laufenden Betrieb gewarnt.
Der User-Agent wird wie folgt zusammen gesetzt:
my $firefox_user_agent = sprintf "Mozilla/%s (%s; %s; %s; %s; %s) Gecko/%s Firefox/%s", $mozillaversion, $platform, $security, $os_or_cpu, $locale, $revision, $creation_time, $firefoxversion;
Die meisten Variablen-Namen kommen aus dem als Vorlage dienenden User-Agent-Dokument von mozilla.org, die User-Agent-Seite der Wikipedia wurde ebenfalls genutzt.
Die Werte für $mozillaversion, $security, $revision und
$firefoxversion sind konstant, die restlichen Werte werden pseudo-zufällig gewählt.
$os_or_cpu setzt sich aus zwei voneinander abhängigen Teilen zusammen,
dem Betriebssystem und der Hardware.
Für $creation_time wählt uagen einen Tag der zwischen dem aktuellen Datum
und dem Release-Datum liegt. Das Standard-Release-Datum kann über die Kommandozeile überschrieben werden,
dabei sollten aber die Firefox-Version und gegebenfalls die Revision ebenfalls angepasst werden,
ansonsten könnte ein ungültiger User-Agent generiert werden.
uagen
(Signatur)
steht unter der von OpenBSD übernommenen BSD-Lizenz.
Die Datei-Endung .pl
ist auf den meisten Betriebssystemen nicht nötig und kann nach dem
Runterladen entfernt werden.
uagen sollte auf allen mit Perl ausgestatteten Rechnern laufen.
Debian-Nutzer können uagen auch über ein
inoffizielles apt-get-Paket installieren.
Diese Seite ist unvollständig und wird nur unregelmäßig aktualisiert, uagen kommt
aber mit Dokumentation, die über perldoc uagen
angezeigt werden kann.