florifrosch: betriebssystem ermitteln

welche möglichkeiten gibt es für das betriebsystem, wenn ich

  
<?php  
// test  
// $_SERVER['HTTP_USER_AGENT'];  
echo "$_SERVER['HTTP_USER_AGENT'];";  
?>  

ausgeben lasse?

gibt es irgendwo eine liste, was herauskommen kann?

  1. Hallo,

    welche möglichkeiten gibt es für das betriebsystem, ...

    alle nur erdenklichen.

    <?php

    // test
    // $_SERVER['HTTP_USER_AGENT'];
    echo "$_SERVER['HTTP_USER_AGENT'];";
    ?>

    
    > gibt es irgendwo eine liste, was herauskommen kann?  
      
    Nein, denn der User Agent ist in vielen Browsern beliebig einstellbar. Es \*kann\* sein, dass ein Hinweis auf das Betriebssystem enthalten ist, aber es ist wirklich nicht mehr als das: Ein Hinweis. Du kannst weder davon ausgehen, dass der User Agent als Information überhaupt vorhanden ist, noch dass er eine sinnvolle Information enthält, noch dass diese Information tatsächlich stimmt.  
      
    So long,  
     Martin  
    
    -- 
    Ich stehe eigentlich gern früh auf.  
    Außer morgens.
    
  2. Hallo florifrosch,

    Ich habe in einem Logfile-Auswerter einmal Folgendes zur Bestimmung des Betriebsystems benutzt:

      
    $os = '-';  
    if (stripos($useragent,'win') !== false) $os = 'Windows';  
    else if (stripos($useragent,'linux') !== false) $os = 'Linux';  
    else if (stripos($useragent,'mac') !== false) $os = 'Macintosh';  
    else if (stripos($useragent,'freebsd') !== false) $os = 'FreeBSD';  
    else if (stripos($useragent,'solaris') !== false) $os = 'Sun Solaris';  
    else if (stripos($useragent,'unix') !== false) $os = 'Unbekanntes Unix-System';  
      
    $os_version = '-';  
    if ($os == 'Windows' && stripos($useragent,'nt 6.0') !== false) $os_version = 'Windows Vista';  
    else if ($os == 'Windows' && stripos($useragent,'nt 5.2') !== false) $os_version = 'Windows XP Professional x64 Edition';  
    else if ($os == 'Windows' && stripos($useragent,'nt 5.1') !== false) $os_version = 'Windows XP';  
    else if ($os == 'Windows' && stripos($useragent,'nt 5.0') !== false) $os_version = 'Windows 2000';  
    else if ($os == 'Windows' && stripos($useragent,'nt 4.0') !== false) $os_version = 'Windows NT 4.0';  
    else if ($os == 'Windows' && stripos($useragent,'nt 3.51') !== false) $os_version = 'Windows NT 3.51';  
    else if ($os == 'Windows' && stripos($useragent,'nt 3.5') !== false) $os_version = 'Windows NT 3.5';  
    else if ($os == 'Windows' && stripos($useragent,'nt 3.1') !== false) $os_version = 'Windows NT 3.1';  
    else if ($os == 'Linux' && stripos($useragent,'debian') !== false) $os_version = 'Linux - Debian';  
    else if ($os == 'Linux' && stripos($useragent,'fedora') !== false) $os_version = 'Linux - Fedora Core';  
    else if ($os == 'Linux' && stripos($useragent,'gentoo') !== false) $os_version = 'Gentoo Linux';  
    else if ($os == 'Linux' && stripos($useragent,'mandriva') !== false) $os_version = 'Linux - Mandriva';  
    else if ($os == 'Linux' && stripos($useragent,'slackware') !== false) $os_version = 'Slackware Linux';  
    else if ($os == 'Linux' && stripos($useragent,'suse') !== false) $os_version = 'SUSE Linux';  
    else if ($os == 'Linux' && stripos($useragent,'kubuntu') !== false) $os_version = 'Linux - Kubuntu';  
    else if ($os == 'Linux' && stripos($useragent,'ubuntu') !== false) $os_version = 'Linux - Ubuntu';  
    else if ($os == 'Linux' && stripos($useragent,'knoppix') !== false) $os_version = 'Linux - Knoppix';  
    else if ($os == 'Linux' && stripos($useragent,'mepis') !== false) $os_version = 'MEPIS Linux';  
    else if ($os == 'Linux' && stripos($useragent,'Xandros') !== false) $os_version = 'Linux - Xandros';  
    else if ($os == 'Macintosh' && stripos($useragent,'mac os x') !== false) $os_version = 'Mac OS X';  
    else if ($os == 'Macintosh') $os_version = 'Mac OS';  
    
    

    $useragent würde dann bei dir $_SERVER['HTTP_USER_AGENT'] entsprechen.

    Gruß,
    Dodwin

    --
    Dodwin
    1. Ich habe in einem Logfile-Auswerter einmal Folgendes zur Bestimmung des Betriebsystems benutzt:

      und welches betriebssystem ist "bundestrojaner 1.3"? - den user agent des browsers auswerten ist mindestens so aussagekräftig wie astrologie (wobei astrologie wahrscheinlich einen vorteil hat)

      1. [latex]Mae  govannen![/latex]

        und welches betriebssystem ist "bundestrojaner 1.3"? -

        SpyOS 1.3b24 Codename "Wolfgang"

        den user agent des browsers auswerten ist mindestens so aussagekräftig wie astrologie (wobei astrologie wahrscheinlich einen vorteil hat)

        Ack. Schon die erste Zeile
        if (stripos($useragent,'win') !== false) $os = 'Windows';
        ist sinnlos.

        Was ist, wenn ein (potentieller) neuer UserAgent für Linux/MAC/whatever z.B. Darwin/Erwin/Winkelmann/.../.../... heißt?

        Cü,

        Kai

        --
        YouTube Video-Tipp: Harmonic Curves
        YouTube Video-Tipp: Pipe Dreams
        selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
        1. Was ist, wenn ein (potentieller) neuer UserAgent für Linux/MAC/whatever z.B. Darwin/Erwin/Winkelmann/.../.../... heißt?

          du solltest hinzufügen, dass es tatsächlich schon einige mit diesen namen gibt ;)

          darwin oder opendarwin dürfte wohl äusserst bekannt sein

          pingwinek ist zb eine polnische linux distribution oder winbi eine indonesische

      2. Hallo,

        Ich hatte schon fast damit gerechnet, dass irgendjemand kommt und sich beschwert.

        Klar kann so eine Abfrage nicht alle möglichen Betriebssyteme erkennen, aber es gibt doch die Möglichkeit viele (wahrscheinlich sogar den Großteil) zu identifizieren.

        Gruß,
        Dodwin

        --
        Dodwin
        1. Ich hatte schon fast damit gerechnet, dass irgendjemand kommt und sich beschwert.

          es beschwer sich keiner, du publizierst nur ein fehlerhaftes script
          wenn musst du den vollständigen user-agent-string mit einer datenbank vergleichen und nicht einfach mit stripos nach "win" suchen und sagen "du bist ein windows"

          und auch das ist wie gesagt schon im ansatz zum scheitern verurteilt

          Klar kann so eine Abfrage nicht alle möglichen Betriebssyteme erkennen, aber es gibt doch die Möglichkeit viele (wahrscheinlich sogar den Großteil) zu identifizieren.

          wie oben schon erwähnt, dein script ist bereits im ansatz fehlerhaft, ein paar beispiele gefällig?:

          • yacybot (ein robot der sich als irgendwas mit "window" identifziert)
          • sitewinder (ein filter den deine abfrage einfach mal pauschal als "windows" identifizieren würde)
          • winona (der robot von whatyouseek)
          • yandex (ein crawler/linkchecker der sich als windows ausgibt)
          • snoopy (eine php browser simulator klasse) idetifiziert sich mit "... Windows NT 5.1; MyIE2"
          • spacebison (ein proxy) identifziert sich als "... win67 ..."
          • winkbot (ein crawler)
          • yahoo-mmaudvid (der yahoo-multimedia-crawler identifiziert sich als internet explorer 7 unter windows)
          • curl (identifiziert sich unter mac os als "powerpc-apple-darwin7.0")
          • vieles, was einfach mal pauschal "cygwin" im agent-string hat
          1. Hallo suit,

            wenn musst du den vollständigen user-agent-string mit einer datenbank vergleichen und nicht einfach mit stripos nach "win" suchen und sagen "du bist ein windows"

            Wie ich bereits schrieb habe ich das Script in einem Programm zur Logfile-Auswertung benutzt.
            Da es viele Daten zur Auswertung gab ist das Script selber klein gehalten um möglichst schnell zu arbeiten.
            Würde ich jeden Useragent mit einer Datenbank vergleichen denke ich nicht, dass sich damit zeitlich gesehen effektiv Logdateien auswerten lassen könnten.

            wie oben schon erwähnt, dein script ist bereits im ansatz fehlerhaft, ein paar beispiele gefällig?:

            Das ist so nicht richtig. Wie ich nochmals erwähne handelte es sich bei mir um eine Logfile-Auswertung! Und für diesen Zweck ist der Ansatz meiner Ansicht nach in Ordnung. Der Threadsteller kann sich selber überlegen ob ihm das Script für seine Zwecke ausreicht oder nicht.

            Aber um auf deine Beispiele zu kommen, ganz so dumm war mein Script auch nicht:
            In meiner Auswertung gab es eine Variable $bot, die vorher deklariert wurde und die auf einige Bots geprüft hat. Ja, ich weiß, dass auch diese Variable nicht alle Bots findet, aber zumindest deine genannten würden auf Grund der Schlüsselwörter "bot","seek",etc. erkannt werden.

            Gruß,
            Dodwin

            --
            Dodwin
            1. In meiner Auswertung gab es eine Variable $bot, die vorher deklariert wurde und die auf einige Bots geprüft hat. Ja, ich weiß, dass auch diese Variable nicht alle Bots findet, aber zumindest deine genannten würden auf Grund der Schlüsselwörter "bot","seek",etc. erkannt werden.

              wie ich bereits sagte, auswerten anahnd schlüsselwörtern ist uncool, da du niemals 100%ig sicherstellen kannst, das ein derart kurzes schlüsselwort nicht zufällig in einem anderen (häufig verwendeten) string steckt

              insbesondere die beispiele mit cygwin und darwin sollten darlegen, dass die methode äusserst uncool ist

              dass der op selbst entscheiden kann ob er die methode verwendet oder nicht ist natürlich richtig, aber du hast einfach mal dein script reingepackt ohne über die risiken aufzuklären

              ein arzt drückt dir auch nicht ein halbes kilo gras in die hand und sagt "hilft gegen grünen star, rauch mal schön"

              der op hatte also garnicht die chance zu wissen, welche nachteile die von dir angesprochene lösung mitsicht bringt - darum wurde das von dritter stelle nachgereicht und es ist keineswegs als gemeckere zu werten - es liegt leider auf der hand, dass dein script (so wie es gepostet wurde) schon in der ersten zeile fehlerhaft ist - deine zusatzinfo, dass du bots anhand "bot" und "seek" rausfilterst ist löblich, aber die hätte zuerst kommen sollen - im übrigen, mit etwas zeit finde ich sicher viele beispiele, die user agents mit deiner lösung als bot klassifizieren, aber eigentlich keine sind ;)