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'); } }