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

眉间皱痕 提交于 2020-01-05 12:56:33

问题


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.


回答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)");



回答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.




回答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 ?>




回答4:


Info about .NET CLR versions in the UserAgent:

  • http://www.hanselman.com/blog/TheNETFrameworkAndTheBrowsersUserAgentString.aspx
  • http://msdn.microsoft.com/en-us/library/ms537503.aspx


来源:https://stackoverflow.com/questions/3179127/how-to-detect-net-framework-installed-in-a-web-page-pure-html-or-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!