Tutorial :How to detect .NET framework installed in a web page (pure HTML or PHP)



Question:

I need to display additional information on a web page (PHP) if one of the following criteria is met:

  • .NET Framework Installed on the client machine in lower than 3.5
  • Impossible to determine if .NET Framework 3.5 is installed or not on the client machine

I know that some browser (if not only one, IE) is sending that information in his tag.

Can any of you provide me with his suggestions ?

Website is built in PHP.

Thanks!

EDIT:

Proposed answers are incomplete and/or don't provide me with a robust solution.


Solution:1

Here is another version I actually made for a friend of mine and realised that there was a bounty on this thread so what the hell :)

This is fully working but only with User-agent strings as there is no alternative means of doing so.

The core class:

class NETFrameworkChecker  {      //General String / Array holders      var $original_au,$ua_succesParse,$ua_componants,$ua_dotNetString,$CLRTag = "";        //IsInstalled      var $installed = false;        //Version holders      public $major = 0,$minor = 0,$build = 0;        public function __construct($ua = false)      {          $this->original_au = $ua !== false ? $ua : $_SERVER['HTTP_USER_AGENT'];          $this->ParserUserAgent();      }        public function Installed(){return (bool)$this->installed;}        public function AUTag(){return $this->CLRTag;}        //Version Getters      public function getMajor(){return $this->major;}      public function getMinor(){return $this->minor;}      public function getBuild(){return $this->build;}        private function ParserUserAgent()      {          $this->ua_succesParse = (bool) preg_match('/(?<browser>.+?)\s\((?<components>.*?)\)/',$this->original_au,$this->ua_componants);          if($this->ua_succesParse)          {              $this->ua_componants = explode(';',$this->ua_componants['components']);              foreach($this->ua_componants as $aComponant)              {                  $aComponant = trim($aComponant);                  if(substr(strtoupper($aComponant),0,4) == ".NET")                  {                      //We have .Net Installed                      $this->installed = true;                      $this->CLRTag = $aComponant;                        //Lets make sure we can get the versions                      $gotVersions = (bool)preg_match("/\.NET.CLR.+?(?<major>[0-9]{1})\.(?<minor>[0-9]{1})\.(?<build>[0-9]+)/si",$aComponant,$versions);                      if($gotVersions)                      {                          $this->major = (int)$versions['major'];                          $this->minor = (int)$versions['minor'];                          $this->build = (int)$versions['build'];                      }                      break;                  }              }          }      }  }  

Example Usage:

$Net = new NETFrameworkChecker(); //leave first param blank to detect current user agent    if($Net->Installed())  {     if($Net->getMajor()> 2 && $Net->getMinor() >= 0)     {        //User is using a >NET system thats greater than 2.0.0000        if($Net->GetBuild() >= 0200)        {           //We can do stuff with so that's only supported from this build up-words        }     }else     {        //Redirect them asking them to upgrade :) pretty please     }  }  

If you also want to check custom UA Strings from DB lets say

$Net = new NETFrameworkChecker("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; GTB6.4; .NET CLR 2.0.50727)");  


Solution:2

The only way to get this information is from the user agent that the browser sends. You can parse the .NET version from there. But note that client can spoof this information or omit it completely, so I wouldn't base any critical functionality on this.


Solution:3

I would try and do a strstr on the UserAgent in PHP, Example Below

A .NET User Agent : Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; GTB6.4; .NET CLR 2.0.50727)

The PHP:

<?php  function DotNetInstalled($ua = false)  {      $ua = $ua ? $ua : $_SERVER['HTTP_USER_AGENT'];      //return (strstr('.NET CLR',$ua) !== false);      $matches = preg_match('^\.NET CLR ([0-4]+\.)?([0-9]\.)?(\*|\d+)$',$ua);      if((int)$matches[1] > 0)      {         return array(             (int)$matches[1],             (int)$matches[2],             (int)$matches[3],         );      }      return false;  }    if(false !== ($version = DotNetInstalled()))  {     //Show me the money     //$version[0] = 2     //$version[1] = 0     //$version[2] = 50727  }  ?>  

I would also check out the following PEAR Package : http://pear.php.net/package/Net_UserAgent_Detect ?>


Solution:4

Info about .NET CLR versions in the UserAgent:


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »