forked from extern/egroupware
330 lines
10 KiB
PHP
330 lines
10 KiB
PHP
<?php
|
|
/******************************************
|
|
** Description : PHPClientSniffer
|
|
** Version : 1.0.0
|
|
** File Name : PHPClientSniffer.php3
|
|
** Author : Roger Raymond for PHyX8 studios
|
|
** Author Email : roger.raymond@asphyxia.com
|
|
** Created : Wednesday, August 23, 2000
|
|
** Last Modified :
|
|
** Modified By :
|
|
*'
|
|
INFO:
|
|
Returns client information based on HTTP_USER_AGENT
|
|
|
|
BASED ON WORKS AND IDEAS BY:
|
|
Tim Perdue of PHPBuilder.com
|
|
http://www.phpbuilder.com/columns/tim20000821.php3
|
|
|
|
The Ultimate JavaScript Client Sniffer by Netscape.
|
|
http://developer.netscape.com/docs/examples/javascript/NAME_type.html
|
|
|
|
========================================================================
|
|
USAGE:
|
|
========================================================================
|
|
include("PHPClientSniffer.php3");
|
|
$is = new sniffer;
|
|
========================================================================
|
|
VARIABLE NAMES VALUES
|
|
========================================================================
|
|
$is->UA The HTTP USER AGENT String
|
|
$is->NAME Browser Name (Netscape, IE, Opera, iCab, Unknown)
|
|
$is->VERSION Browser Full Version
|
|
$is->MAJORVER Browser Major Version
|
|
$is->MINORVER Browser Minor Version
|
|
$is->AOL True/False
|
|
$is->WEBTV True/False
|
|
$is->JS Assumed JavaScript Version Supported by Browser
|
|
$is->PLATFORM System Platform (Win16,Win32,Mac,OS2,Unix)
|
|
$is->OS System OS (Win98,OS2,Mac68k,linux,bsd,etc...) see code
|
|
$is->IP REMOTE_ADDR
|
|
|
|
========================================================================
|
|
|
|
'****************************************/
|
|
/* $Id$ */
|
|
|
|
class clientsniffer
|
|
{ var $UA = "";
|
|
var $NAME = "Unknown";
|
|
var $VERSION = 0;
|
|
var $MAJORVER = 0;
|
|
var $MINORVER = 0;
|
|
var $AOL = false;
|
|
var $WEBTV = false;
|
|
var $JS = 0.0;
|
|
var $PLATFORM = "Unknown";
|
|
var $OS = "Unknown";
|
|
var $IP = "Unknown";
|
|
|
|
/* START CONSTRUCTOR */
|
|
function clientsniffer()
|
|
{ $this->UA = getenv(HTTP_USER_AGENT);
|
|
|
|
// Determine NAME Name and Version
|
|
if ( eregi( 'MSIE ([0-9].[0-9a-zA-Z]{1,4})',$this->UA,$info) ||
|
|
eregi( 'Microsoft Internet Explorer ([0-9].[0-9a-zA-Z]{1,4})',$this->UA,$info) )
|
|
{ $this->VERSION = $info[1];
|
|
$this->NAME = 'IE';
|
|
}
|
|
elseif ( eregi( 'Opera ([0-9].[0-9a-zA-Z]{1,4})',$this->UA,$info) ||
|
|
eregi( 'Opera/([0-9].[0-9a-zA-Z]{1,4})',$this->UA,$info) )
|
|
{ $this->VERSION = $info[1];
|
|
$this->NAME = 'Opera';
|
|
}
|
|
elseif ( eregi( 'iCab ([0-9].[0-9a-zA-Z]{1,4})',$this->UA,$info) ||
|
|
eregi( 'iCab/([0-9].[0-9a-zA-Z]{1,4})',$this->UA,$info) )
|
|
{ $this->VERSION = $info[1];
|
|
$this->NAME = 'iCab';
|
|
}
|
|
elseif ( eregi( 'Netscape6/([0-9].[0-9a-zA-Z]{1,4})',$this->UA,$info) )
|
|
{ $this->VERSION = $info[1];
|
|
$this->NAME = 'Netscape';
|
|
}
|
|
elseif ( eregi( 'Mozilla/([0-9].[0-9a-zA-Z]{1,4})',$this->UA,$info) )
|
|
{ $this->VERSION = $info[1];
|
|
$this->NAME = 'Netscape';
|
|
}
|
|
else
|
|
{ $this->VERSION = 0;
|
|
$this->NAME = 'Unknown';
|
|
}
|
|
|
|
// Determine if AOL or WEBTV
|
|
if( eregi( 'aol',$this->UA,$info))
|
|
{ $this->AOL = true;
|
|
}
|
|
elseif( eregi( 'webtv',$this->UA,$info))
|
|
{ $this->WEBTV = true;
|
|
}
|
|
|
|
// Determine Major and Minor Version
|
|
if($this->VERSION > 0)
|
|
{ $pos = strpos($this->VERSION,".");
|
|
if ($pos > 0)
|
|
{ $this->MAJORVER = substr($this->VERSION,0,$pos);
|
|
$this->MINORVER = substr($this->VERSION,$pos,strlen($this->VERSION));
|
|
}
|
|
else $this->MAJORVER = $this->VERSION;
|
|
}
|
|
|
|
// Determine Platform and OS
|
|
|
|
// Check for Windows 16-bit
|
|
if( eregi('Win16',$this->UA) ||
|
|
eregi('windows 3.1',$this->UA) ||
|
|
eregi('windows 16-bit',$this->UA) ||
|
|
eregi('16bit',$this->UA))
|
|
{ $this->PLATFORM = "Win16";
|
|
$this->OS = "Win31";
|
|
}
|
|
|
|
// Check for Windows 32-bit
|
|
if(eregi('Win95',$this->UA) || eregi('windows 95',$this->UA))
|
|
{ $this->PLATFORM = "Win32";
|
|
$this->OS = "Win95";
|
|
}
|
|
elseif(eregi('Win98',$this->UA) || eregi('windows 98',$this->UA))
|
|
{ $this->PLATFORM = "Win32";
|
|
$this->OS = "Win98";
|
|
}
|
|
elseif(eregi('WinNT',$this->UA) || eregi('windows NT',$this->UA))
|
|
{ $this->PLATFORM = "Win32";
|
|
$this->OS = "WinNT";
|
|
}
|
|
else
|
|
{ $this->PLATFORM = "Win32";
|
|
$this->OS = "Win9xNT";
|
|
}
|
|
|
|
// Check for OS/2
|
|
if( eregi('os/2',$this->UA) ||
|
|
eregi('ibm-webexplorer',$this->UA))
|
|
{ $this->PLATFORM = "OS2";
|
|
$this->OS = "OS2";
|
|
}
|
|
|
|
// Check for Mac 68000
|
|
if( eregi('68k',$this->UA) ||
|
|
eregi('68000',$this->UA))
|
|
{ $this->PLATFORM = "Mac";
|
|
$this->OS = "Mac68k";
|
|
}
|
|
|
|
//Check for Mac PowerPC
|
|
if( eregi('ppc',$this->UA) ||
|
|
eregi('powerpc',$this->UA))
|
|
{ $this->PLATFORM = "Mac";
|
|
$this->OS = "MacPPC";
|
|
}
|
|
|
|
// Check for Unix Flavor
|
|
|
|
//SunOS
|
|
if(eregi('sunos',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "sun";
|
|
}
|
|
if(eregi('sunos 4',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "sun4";
|
|
}
|
|
elseif(eregi('sunos 5',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "sun5";
|
|
}
|
|
elseif(eregi('i86',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "suni86";
|
|
}
|
|
|
|
// Irix
|
|
if(eregi('irix',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "irix";
|
|
}
|
|
if(eregi('irix 6',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "irix6";
|
|
}
|
|
elseif(eregi('irix 5',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "irix5";
|
|
}
|
|
|
|
//HP-UX
|
|
if(eregi('hp-ux',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "hpux";
|
|
}
|
|
if(eregi('hp-ux',$this->UA) && ereg('10.',$this-UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "hpux10";
|
|
}
|
|
elseif(eregi('hp-ux',$this->UA) && ereg('09.',$this-UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "hpux9";
|
|
}
|
|
|
|
//AIX
|
|
if(eregi('aix',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "aix";
|
|
}
|
|
if(eregi('aix1',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "aix1";
|
|
}
|
|
elseif(eregi('aix2',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "aix2";
|
|
}
|
|
elseif(eregi('aix3',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "aix3";
|
|
}
|
|
elseif(eregi('aix4',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "aix4";
|
|
}
|
|
|
|
// Linux
|
|
if(eregi('inux',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "linux";
|
|
}
|
|
|
|
//Unixware
|
|
if(eregi('unix_system_v',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "unixware";
|
|
}
|
|
|
|
//mpras
|
|
if(eregi('ncr',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "mpras";
|
|
}
|
|
|
|
//Reliant
|
|
if(eregi('reliantunix',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "reliant";
|
|
}
|
|
|
|
// DEC
|
|
if(eregi('dec',$this->UA) ||
|
|
eregi('osfl',$this->UA) ||
|
|
eregi('alphaserver',$this->UA) ||
|
|
eregi('ultrix',$this->UA) ||
|
|
eregi('alphastation',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "dec";
|
|
}
|
|
|
|
// Sinix
|
|
if(eregi('sinix',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "sinix";
|
|
}
|
|
|
|
// FreeBSD
|
|
if(eregi('freebsd',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "freebsd";
|
|
}
|
|
|
|
// BSD
|
|
if(eregi('bsd',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "bsd";
|
|
}
|
|
|
|
// VMS
|
|
if(eregi('vax',$this->UA) || eregi('openvms',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "vms";
|
|
}
|
|
|
|
// SCO
|
|
if(eregi('sco',$this->UA) || eregi('unix_sv',$this->UA))
|
|
{ $this->PLATFORM = "Unix";
|
|
$this->OS = "sco";
|
|
}
|
|
|
|
// Assume JavaScript Version
|
|
|
|
// make the code a bit easier to read
|
|
$ie = eregi("ie",$this->NAME);
|
|
$ie5 = ( eregi("ie",$this->NAME) && ($this->MAJORVER >= 5) );
|
|
$ie4 = ( eregi("ie",$this->NAME) && ($this->MAJORVER >= 4) );
|
|
$ie3 = ( eregi("ie",$this->NAME) && ($this->MAJORVER >= 3) );
|
|
|
|
$nav = eregi("netscape",$this->NAME);
|
|
$nav5 = ( eregi("netscape",$this->NAME) && ($this->MAJORVER >= 5) );
|
|
$nav4 = ( eregi("netscape",$this->NAME) && ($this->MAJORVER >= 4) );
|
|
$nav3 = ( eregi("netscape",$this->NAME) && ($this->MAJORVER >= 3) );
|
|
$nav2 = ( eregi("netscape",$this->NAME) && ($this->MAJORVER >= 2) );
|
|
|
|
$opera = eregi("opera",$this->NAME);
|
|
|
|
// do the assumption
|
|
// update as new versions are released
|
|
|
|
// Provide upward compatibilty
|
|
if($nav && ($this->MAJORVER > 5)) $this->JS = 1.4;
|
|
elseif($ie && ($this->MAJORVER > 5)) $this->JS = 1.3;
|
|
// check existing versions
|
|
elseif($nav5) $this->JS = 1.4;
|
|
elseif(($nav4 && ($this->VERSION > 4.05)) || $ie4) $this->JS = 1.3;
|
|
elseif(($nav4 && ($this->VERSION <= 4.05)) || $ie4) $this->JS = 1.2;
|
|
elseif($nav3 || $opera) $this->JS = 1.1;
|
|
elseif(($nav && ($this->MAJORVER >= 2)) || ($ie && ($this->MAJORVER >=3))) $this->JS = 1.0;
|
|
//no idea
|
|
else $this->JS = 0.0;
|
|
|
|
// Grab IP Address
|
|
$this->IP = getenv('REMOTE_ADDR');
|
|
}
|
|
}
|