Patrick Andrieu: Bekloppte User Agents zuordnen (RegExp)

Beitrag lesen

Hallo alle!

Das ist die Auswertung meiner Okober-Logfile:

Anzahl aller Hits: 309514
Internet Explorer gesamt: 148742 (48.06% aller Hits)
IE 3: 30 (0.01% aller Hits)
IE 4: 5160 (1.67% aller Hits)
IE 5: 8095 (2.62% aller Hits)
IE 6: 93525 (30.22% aller Hits)
IE 7: 43595 (14.08% aller Hits)
Geckos: 93937 (30.35% aller Hits)
Opera: 7694 (2.49% aller Hits)
Googlebot: 3813 (1.23% aller Hits)
Yahoo! Slurp: 9552 (3.09% aller Hits)

Mich interessieren im Moment nur die verschiedenen Versionen des Internet Explorers. Wer hier zum Taschenrechner greift, und alle Einzel-IEs zusammen addiert, kommt auf 150405, also einige mehr als die unter »Internet Explorer gesamt« herausgekommende Zahl von 148742.

Grund sind folgende UA-Strings (nach den besuchten Seiten zu urteilen, handelt es sich um Spammer):

Typ 1: Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1)
Typ 2: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 7.0; Win32; 1&1); .NET CLR 2.0.50727; IEMB3; IEMB3)
Typ 3: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 1.1.4322)
Typ 4: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; http://bsalsa.com)
Typ 5: User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2)

Ja, manchmal steht sogar tatsächlich »User-Agent« im User-Agent-String drin ;) Typ 2,3,4,5 sind ziemlich ähnlich, manchmal kommt MSIE 6 zuerst und MSIE 7 weiter hinten, manchmal umgekehrt, manchmal zwei Mal die selbe Versionsnummer, etc...

Ich möchte nun diese beknackten UAs immer der im UA-String zuerst vorkommenden Browserversion zuordnen, beim oben genannten Typ 1 soll ein MSIE 6 gezählt werden, bei Typ 3 ein MSIE 7.

Bei der bisherigen, noch falschen Auswertung, sehen die entsprechenden Zeilen wie folg aus:

$allIE++ if (/compatible; MSIE / && !/Opera/);
            $anzahlIE3++ if (/compatible; MSIE 3/ && !/Opera/);
            $anzahlIE4++ if (/compatible; MSIE 4/ && !/Opera/);
            $anzahlIE5++ if (/compatible; MSIE 5/ && !/Opera/);
            $anzahlIE6++ if (/compatible; MSIE 6/ && !/Opera/);
            $anzahlIE7++ if (/compatible; MSIE 7/ && !/Opera/);

Die anzahl aller IE ($allIE) müsste richtig sein, und entspricht sicher die Anzahl aller Zeilen der Datei, in welchen »compatible; MSIE « in exakt dieser Schreibweise (kein ignore case) vorkommt. Da kein g-Flag notiert ist, wird der RegExp wohl beim ersten Vorkommen dieser Zeichenkette zufrieden sein. Hier wird also nichts doppelt gezählt.

Bei den Einzelnversionen dagegen, wird (lassen wir IE 3, 4, und 5 erstmal unbeachtet), einmal $anzahlIE6 jedesmal inkrementiert, sobald »compatible; MSIE 6« gefunden wird, und $anzahlIE7 auch jedesmal, sobald »compatible; MSIE 7« vorkommt. Ergibt bei einem UA wie Typ 3 eine Doppelt-Zählung, die ich nun vermeiden will...

Mit negativen Lookaheads gehen mir anscheinend einige Zeilen verloren:

$allIE++ if (/compatible; MSIE / && !/Opera/);
            $anzahlIE3++ if (/compatible; MSIE 3/ && !/Opera/);
            $anzahlIE4++ if (/compatible; MSIE 4/ && !/Opera/);
            $anzahlIE5++ if (/compatible; MSIE 5/ && !/Opera/);
            $anzahlIE6++ if (/compatible; MSIE 6(?!.+MSIE)/ && !/Opera/);
            $anzahlIE7++ if (/compatible; MSIE 7(?!.+MSIE)/ && !/Opera/);

Dies ergibt:

Anzahl aller Hits: 309514
Internet Explorer gesamt: 148742 (48.06% aller Hits)
IE 3: 30 (0.01% aller Hits)
IE 4: 5160 (1.67% aller Hits)
IE 5: 7194 (2.32% aller Hits)
IE 6: 92617 (29.92% aller Hits)
IE 7: 42119 (13.61% aller Hits)

Alle IEs: 148021 (Fehlen: 148742 - 148021 = 721).

Lasse ich mir die »Doubletten« ausgeben:

$doubletten++ if(/compatible; MSIE.+compatible; MSIE/);

erhalte ich 2491.

Dass mehr Doubletten existieren, als die Differenz von 721 scheint logisch, da wie bei Typ 2 zu sehen, es einige UA-Strings gibt, in denen zwei Mal die selbe IE-Version vorkommt.

Ich habe dennoch keine Idee mehr, wie ich vorgehen soll. Wer bringt mir den entsprechenden Denkschubs, wie ich meine Auswertung wieder »gerade fälsche«? :)

Viele Grüße aus Frankfurt/Main,
Patrick

--

_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?
0 79

Bekloppte User Agents zuordnen (RegExp)

Patrick Andrieu
  • programmiertechnik
  1. 0
    Cheatah
    1. 2

      UA-Statistiken fälschen

      Siechfred
      • perl
      1. 0
        Patrick Andrieu
        1. 1
          Siechfred
          1. 0

            Die erfolgreiche Fälschung

            Patrick Andrieu
            1. 1

              Das Modul zur erfolgreichen Fälschung?

              Siechfred
              1. 0
                Patrick Andrieu
                1. 0
                  Siechfred
              2. 0
                Siechfred
              3. 0
                Patrick Andrieu
                1. 0
                  Siechfred
                  1. 0
                    Patrick Andrieu
                    1. 0
                      Siechfred
                      1. 0
                        Patrick Andrieu
                        1. 0
                          Siechfred
                          1. 0
                            Patrick Andrieu
                            1. 0
                              Siechfred
                              1. 0
                                Patrick Andrieu
                                1. 0
                                  Patrick Andrieu
                                  1. 0
                                    Siechfred
                                    1. 0
                                      Patrick Andrieu
                                      1. 0
                                        Siechfred
                                        1. 0
                                          Patrick Andrieu
                                          1. 0
                                            Patrick Andrieu
                                          2. 0
                                            Siechfred
                                2. 0
                                  Siechfred
            2. 0

              Die erfolgreichen Statmaker- und -fälscher-Skripts für 1&1-User!

              Patrick Andrieu
              1. 0
                Patrick Andrieu
                1. 0
                  Struppi
                  1. 0
                    Patrick Andrieu
    2. 0
      Patrick Andrieu
      1. 0
        Cheatah
        1. 0
          Patrick Andrieu
  2. 0
    Don P
    1. 0
      Don P
    2. 0
      Patrick Andrieu
      1. 0
        Don P
        1. 0
          Patrick Andrieu
          1. 0
            Don P
            1. 0
              Patrick Andrieu
      2. 0

        Logline splitter (RegExp)

        Patrick Andrieu
  3. 2
    Struppi
    1. 0
      Patrick Andrieu
      1. 0
        Patrick Andrieu
  4. 0
    Der Martin
    1. 0
      Alexander (HH)
    2. 0
      Patrick Andrieu
      1. 0
        Der Martin
        1. 0
          Cheatah
          1. 0
            Patrick Andrieu
            1. 0
              Cheatah
        2. 0
          Patrick Andrieu
          1. 0
            Der Martin
            1. 0

              RegExp'sch ist gar nicht so schwer :)

              Siechfred
              • menschelei
    3. 0
      Patrick Andrieu
      1. 0
        Der Martin
        1. 0
          Patrick Andrieu
          1. 0
            Patrick Andrieu
            1. 0
              Struppi
      2. 0
        Ingo Turski
        1. 0
          Patrick Andrieu
          1. 0
            Ingo Turski
            1. 0
              Patrick Andrieu
              1. 0
                Ingo Turski
                1. 0
                  Patrick Andrieu
                  1. 0
                    Engin
                  2. 0
                    Engin
                    1. 0
                      Patrick Andrieu
                      1. 0
                        Engin
                        1. 0
                          Patrick Andrieu
                          1. 0
                            Engin
                            1. 0
                              Patrick Andrieu
                              1. 0
                                Engin
                                1. 0
                                  Patrick Andrieu
                                  1. 0
                                    Engin
                  3. 0
                    Ingo Turski
                    1. 0
                      Patrick Andrieu
        2. 0
          Patrick Andrieu