[PHP]Firefox en platform herkenning

Pagina: 1
Acties:
  • 265 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit al een tijdje met het volgende probleem. Ik heb een statistiekenteller gebouwd waarbij ik met behulp van de http_user_agent het platform van de gebruiker vastleg. Dit doe ik met de volgende (gedeeltelijke) code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
function getOS($useragent) 
    { 
        if (eregi("(win|windows)[ ]*((nt)*[ /]*([0-9]+(\.?[0-9]+))*)", $useragent, $regs)) 
        { 
            if (strcasecmp($regs[2], "NT 5.0") == 0) 
            { 
                $regs[2] = "2000"; 
            } 
            elseif (strcasecmp($regs[2], "CE") == 0) 
            { 
                $regs[2] = "CE"; 
            }
            elseif (strcasecmp($regs[2], "NT 5.2") == 0) 
            { 
                $regs[2] = "2003"; 
            } 
            elseif (strcasecmp($regs[2], "NT 5.1") == 0) 
            { 
                $regs[2] = "XP"; 
            } 
            $os = "Windows $regs[2]"; 
        } 
        elseif (stristr($useragent, "Linux")) 

            $os = "Linux"; 
        elseif (stristr($useragent, "Unix")) 
            $os = "Unix"; 
        elseif (stristr($useragent, "GNU")) 
            $os = "GNU"; 
        elseif (stristr($useragent, "BSD")) 
            $os = "BSD"; 
        elseif (stristr($useragent, "Mac")) 
            $os = "MacOS"; 
        else 
            $os = "Unknown"; 

        return $os; 
    } 
?>


In het geval van IE die de volgende http_user_agent geeft:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
gaat dit goed omdat er maar 1 windows in de http_user_agent staat.

Probleem is nu dat firefox de volgende http_user_agent geeft:

Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1

2x windows dus...

Met het bovenstaande script wordt dan "Windows" uitgespuugd i.p.v. "Windows NT 5.1" omdat hij na de eerste windows stopt. Heeft iemand een idee hoe ik ervoor kan zorgen dat het script "windows" negeert en dan dus verder gaat naar "windows nt 5.1"?

[ Voor 9% gewijzigd door Verwijderd op 17-11-2004 16:48 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

al eens gekeken naar get_browser ?

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het gaat hier om het operating system, niet de browser...

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 07 november 2004 @ 22:39:
[...]


Het gaat hier om het operating system, niet de browser...
Dan kan ik de vraag van crisp beantwoorden :P

Hint: Kijk er eens naar

[ Voor 9% gewijzigd door Verwijderd op 07-11-2004 22:42 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

get_browser geeft ook het platform terug, daarbij staan er ook wel handige dingen in de usercomments...

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb dit eerder geprobeerd...

Warning: get_browser(): browscap ini directive not set. in /home/thijnne/public_html/stats/test.php on line 15

En dit moet mijn provider aanzetten... Geloof niet dat ze daar aan beginnen...

[ Voor 81% gewijzigd door Verwijderd op 07-11-2004 22:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

dat kan toch met ini_set ??? Dan kan je het runtime toevoegen aan je ini (voor die sessie), correct me if im wrong...

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 21:12

Tux

Verwijderd schreef op 07 november 2004 @ 22:56:
dat kan toch met ini_set ??? Dan kan je het runtime toevoegen aan je ini (voor die sessie), correct me if im wrong...
Dat is inderdaad mogelijk.

browscap

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Tux schreef op 07 november 2004 @ 22:59:
[...]


Dat is inderdaad mogelijk.

browscap
Kan niet...
browscap NULL PHP_INI_SYSTEM

Vormkracht10


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goed, 10 dagen later en vele discussies met Blue Yellow later, bestaat mijn probleem nog steeds. Browscap willen ze niet standaard aanzetten, dus lijkt het mij het meest voor de hand te liggen om dit met de http_user_agent te doen. Heeft iemand een idee hoe ik het probleem uit post 1 op kan lossen?

Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Kijk hoe vaak windows voor komt in de string, zijn het er 2, dan verwijder je de eerste.

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function getOS($useragent) 
{ 
    if (stristr($useragent, "Windows")) 
    {
        $version = "";
        
        if (stristr($useragent, "NT 5.0")) 
        { 
            $version = "2000"; 
        } 
        elseif (stristr($useragent, "CE")) 
        { 
            $version = "CE"; 
        }
        elseif (stristr($useragent, "NT 5.2")) 
        {
            $version = "2003";
        }
        elseif (stristr($useragent, "NT 5.1"))
        { 
            $version = "XP";
        }
        
        return "Windows " . $version;
    }

    if (stristr($useragent, "Linux"))
        return "Linux";
    
    if (stristr($useragent, "Unix"))
        return "Unix";

    if (stristr($useragent, "GNU"))
        return "GNU";

    if (stristr($useragent, "BSD"))
        return "BSD";

    if (stristr($useragent, "Mac"))
        return "MacOS";

    return "Unknown";
}

Werkt dit niet gewoon dan? Of is het vergelijken van windows zo een probleem?

[ Voor 139% gewijzigd door Michali op 17-11-2004 16:46 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Glashelder schreef op woensdag 17 november 2004 @ 16:34:
Kijk hoe vaak windows voor komt in de string, zijn het er 2, dan verwijder je de eerste.
Klinkt goed, maar hoe realiseer je dat?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Michali schreef op woensdag 17 november 2004 @ 16:35:
Werkt dit niet gewoon dan? Of is het vergelijken van windows zo een probleem?
Nee, want er staan 2 windowsen in de http_user_agent van firefox in combinatie met windows xp.

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Kijk naar de vorm van de user agent
Je ziet dat tussen ( en ) een aantal malen ; staat, die kan je dus gebruiken.
Lelijke oplossing
PHP:
1
2
3
4
<?php
$foo = explode(';', $useragent);
echo $foo[2];
?>

[ Voor 6% gewijzigd door Wolfboy op 17-11-2004 16:40 ]

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Verwijderd schreef op woensdag 17 november 2004 @ 16:38:
[...]

Nee, want er staan 2 windowsen in de http_user_agent van firefox in combinatie met windows xp.
Dat maakt toch niet uit lijkt me? Je weet in ieder geval dat het Windows is. Je gebruikt de string Windows toch niet direct uit de user agent? Kijk maar naar het return statement. Het enige wat belangerijk is dat je weet dat het windows is lijkt me. Of het er nu 1 of 2 keer in staat is niet relevant.

Ik heb ook je regex uitgeschakeld. Die lijkt me ook niet nodig namelijk. Het hele probleem met 2 windows strings is zo ook gelijk uitgeschakeld.

[ Voor 15% gewijzigd door Michali op 17-11-2004 16:44 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb hem getest, maar geeft alleen Windows terug als platform en niet welke windows...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wolfboy schreef op woensdag 17 november 2004 @ 16:40:
Kijk naar de vorm van de user agent
Je ziet dat tussen ( en ) een aantal malen ; staat, die kan je dus gebruiken.
Lelijke oplossing
PHP:
1
2
3
4
<?php
$foo = explode(';', $useragent);
echo $foo[2];
?>
Ga dit even proberen, platform staat altijd op plaats 3 dus... Ik zie potentieel ;)

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Zo even aangepast. Nu moet hij wel werken lijkt me? Er stond nog de functie strcasecmp() was wel handig voor het stukje regex maar niet voor deze nieuwe versie. Even aangepast naar stristr.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Checken of er na 'Windows' gelijk een puntkomma komt in het geval dat de browser firefox is . Of het gedeelte tussen de haakjes splitten op een puntkomma. Of een regular expression over de string heen halen. De mogelijkheden zijn legio. :)

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Michali schreef op woensdag 17 november 2004 @ 16:47:
Zo even aangepast. Nu moet hij wel werken lijkt me? Er stond nog de functie strcasecmp() was wel handig voor het stukje regex maar niet voor deze nieuwe versie. Even aangepast naar stristr.
Volgens mij werkt het!!!!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor jullie hulp!!!!! _/-\o_

Acties:
  • 0 Henk 'm!

  • FireWood
  • Registratie: Augustus 2003
  • Laatst online: 21-09 11:11
Off topic, maar denk ook dat deze waardes zijn te vervalsen en dat je ook icode mee binnen kan krijgen. Idem dat er een ander besturingssysteem achter hangt dan wat er terug wordt gemeld.

Meer informatie: (searching)(found) http://82.150.156.163/artikelen.php?aid=106

[ Voor 11% gewijzigd door FireWood op 17-11-2004 21:33 ]

Noobs don't use "F1", Pro's do, but they can't find the information they needed


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
h.edink schreef op woensdag 17 november 2004 @ 21:32:
Off topic, maar denk ook dat deze waardes zijn te vervalsen en dat je ook icode mee binnen kan krijgen. Idem dat er een ander besturingssysteem achter hangt dan wat er terug wordt gemeld.

Meer informatie: (searching)(found) http://82.150.156.163/artikelen.php?aid=106
Ik ben slechts een kleine internetgebruiker die een site heeft voor persoonlijk gebruik... Zou erg kinderachtig zijn om deze te gaan hacken... Maar bedankt voor de tip!!! :+

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nieuw probleem nu... Hoe herken ik het land van een gebruiker als deze een dns naam heeft die bijvoorbeeld eindigd op .com???

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Niet. Je kan hoogstens nog de whois informatie checken waar het domein is geregistreerd en daar dan weer de land informatie uit filteren. Of checken door welke instantie het IP is uitgegeven en zo de land informatie filteren. Maar dat is niet iets wat je in 2 regels PHP code doet.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Daventry
  • Registratie: Oktober 2004
  • Laatst online: 21-04 10:00
Verwijderd schreef op woensdag 01 december 2004 @ 22:45:
Nieuw probleem nu... Hoe herken ik het land van een gebruiker als deze een dns naam heeft die bijvoorbeeld eindigd op .com???
err niet?

zover ik weet kan je dat niet zomaar in php ofzo ...

enige manier die ik ken (maar dat kan je niet gaan automatiseren) is het ip gaan opzoeken bij ripe.net / arin.net en dan uit die gegevens het land halen, maar zoals gezegd - gaat niet in php


EDIT: wat ben ik traag na een paar biertjes :S

[ Voor 5% gewijzigd door Daventry op 01-12-2004 23:12 ]


Acties:
  • 0 Henk 'm!

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 15-07 09:34

PrinsEdje80

Holographic, not grated...

Voor dit (het .com spul) heb je waarschijnlijk de ip2ext database nodig. Deze wordt (zo gauw als ik het ff kan zien) alleen aangeboden door bbclone (http://bbclone.de/download.php?sub=ip2ext)

Used to be Down Under... Foto gallery


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmmm, op zich kan je met die files wel aan de slag gaan. Vraag is alleen dit. Als je bijvoorbeeld een ip adres hebt dat begint met 145, dan gaat die teller zoeken in 145.inc. Dit staat er in die file:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
nl|2432696320|14680064
uk|2447376384|65536
de|2447441920|65536
fr|2447507456|65536
uk|2447572992|65536
de|2447638528|65536
uk|2447704064|65536
de|2447769600|65536
fr|2447835136|65536
ch|2447900672|65536
uk|2447966208|65536
ch|2448031744|65536
se|2448097280|65536
hu|2448162816|65536
pl|2448228352|65536
fr|2448293888|65536
uk|2448359424|131072
at|2448490496|65536
fr|2448556032|65536
de|2448621568|65536
at|2448687104|65536
ch|2448752640|65536
uk|2448818176|65536
se|2448883712|65536
fr|2448949248|65536
ru|2449014784|65536
ch|2449080320|65536
se|2449145856|65536
ch|2449211392|65536
de|2449276928|131072


Iemand enig idee wat er vervolgens gebeurd en hoe je met de rest van het ip adres kan achterhalen uit welk land het komt??

2432696320 = 145 * 2^24... Zal die richting wel in gaan...

[ Voor 4% gewijzigd door Verwijderd op 02-12-2004 17:08 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

GoT is niet bedoelt voor support op scripts die je niet zelf hebt geschreven. Dit kan je waarschijnlijk prima navragen bij diegene van wie je het hebt gedownload :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Is geen script, is iets wat eerder naar voren is gekomen in dit topic. Wellicht dat iemand hier wel logica in ziet...

Acties:
  • 0 Henk 'm!

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 15-07 09:34

PrinsEdje80

Holographic, not grated...

Verwijderd schreef op donderdag 02 december 2004 @ 17:09:
Is geen script, is iets wat eerder naar voren is gekomen in dit topic. Wellicht dat iemand hier wel logica in ziet...
Ik weet zelf niet hoe de ip2ext werkt, maar misschien kun je door de bbclone code zelf heen spitten, zodat je uiteindelijk het zelf uitvindt.

Het zal idd iets met machten van 2 te doen hebben (65536 = 2^16, misschien een range of zo?)
Just my 2cents, maar idd voor meer details, de code lijkt me...

Ff wat research gedaan in de code mijzelf... Ik kwam op een functie ip2long uit... (Kijk hier voor meer info) De rest mag je zelf uitzoeken >:)

't Is voor de rest gewoon een kwestie inderdaad van de code napluizen. Ik kan je ./lib/new_connect.php en ./lib/marker.php in bbclone aanraden...

[ Voor 10% gewijzigd door PrinsEdje80 op 03-12-2004 03:32 . Reden: Ff wat toegevoegd ]

Used to be Down Under... Foto gallery


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Ik denk dat je dan long2ip nodig hebt, en niet ip2long ;)

Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Ip-2-Country DB? Check deze eens

En hier vind je een compleet artikel hoe je het gebruikt met PERL of PHP. :Y)

Acties:
  • 0 Henk 'm!

  • Daventry
  • Registratie: Oktober 2004
  • Laatst online: 21-04 10:00
Misschien moet je eens gaan kijken hoe PHP Nuke (portal voor PHPbb) het oplost ... Ik merkte net toevallig op een site dat die er wel in sloeg mijn land (Engeland) te achterhalen hoewel mijn host eindigt op .com

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zit nu ook een beetje te prutsen met get_browser().
Maar dan meer met de vraag wat de andere kant allemaal accepteeerd.

Bij mij komt bij Javascript mooi een 1 te staan, als ik Javascript uit zet, blijft er een 1 staan.
Laat get_browser alleen zien dat mijn Internet explorer javascript kan accepteren, maar niet of ie het op dit moment accepteerd?

Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Verwijderd schreef op vrijdag 03 december 2004 @ 21:39:
Ik zit nu ook een beetje te prutsen met get_browser().
Maar dan meer met de vraag wat de andere kant allemaal accepteeerd.

Bij mij komt bij Javascript mooi een 1 te staan, als ik Javascript uit zet, blijft er een 1 staan.
Laat get_browser alleen zien dat mijn Internet explorer javascript kan accepteren, maar niet of ie het op dit moment accepteerd?
Dat lijkt me duidelijk...

Vormkracht10


Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Verwijderd schreef op vrijdag 03 december 2004 @ 21:39:
Ik zit nu ook een beetje te prutsen met get_browser().
Maar dan meer met de vraag wat de andere kant allemaal accepteeerd.

Bij mij komt bij Javascript mooi een 1 te staan, als ik Javascript uit zet, blijft er een 1 staan.
Laat get_browser alleen zien dat mijn Internet explorer javascript kan accepteren, maar niet of ie het op dit moment accepteerd?
Je geeft zelf het antwoord al...
Modbreak:Gebruik de volgende keer liever de edit knop om je vorige post te bewerken i.p.v. nog een keer dezelfde quote met nagenoeg dezelde opmerking.

[ Voor 15% gewijzigd door Creepy op 03-12-2004 23:00 ]

Vormkracht10

Pagina: 1