为了账号安全,请及时绑定邮箱和手机立即绑定

从浏览器检测确切的操作系统版本

从浏览器检测确切的操作系统版本

慕尼黑8549860 2019-12-04 10:53:34
我想知道是否有一种方法可以使用PHP / JS / ASP从浏览器中检测确切的操作系统版本?我知道我可以检测操作系统的类型(Windows XP,Windows Vista,OS X等),但是我需要检测确切的版本:Vista Business,Vista Ultimate,Windows XP Home,Windows XP Pro等。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

简短的回答:不能。


长答案:


您所拥有的只是HTTP User-Agent标头中的信息,该标头通常包含操作系统名称和版本。


通常,在Mac OS和Linux上运行的浏览器会发送足够的信息以标识确切的OS。例如,这是我的User-Agent标头:


Mozilla / 5.0(X11; U; Linux x86_64; zh-CN; rv:1.9.0.7)Gecko / 2009030423 Ubuntu / 8.10(intrepid)Firefox / 3.0.7


您可以看到我正在运行Ubuntu 8.10 Intrepid Ibex。


这是MacBook Pro上Firefox和Safari 4 Beta的报告:


Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.7)Gecko / 2009021906 Firefox / 3.0.7


Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10_5_6; zh-cn)AppleWebKit / 528.16(KHTML,如Gecko)版本/4.0 Safari / 528.16


另一方面,Windows浏览器通常仅报告操作系统版本,而不报告特定的程序包(Pro,Business等):


Mozilla / 5.0(Wi


查看完整回答
反对 回复 2019-12-04
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

经过一番谷歌搜索后,我找到了这段代码,它似乎可以正常工作(尽管没有检测到Unix)


<?php 

$OSList = array

(

// Match user agent string with operating systems

'Windows 3.11' => 'Win16',

'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',

'Windows 98' => '(Windows 98)|(Win98)',

'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',

'Windows XP' => '(Windows NT 5.1)|(Windows XP)',

'Windows Server 2003' => '(Windows NT 5.2)',

'Windows Vista' => '(Windows NT 6.0)',

'Windows 7' => '(Windows NT 7.0)',

'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',

'Windows ME' => 'Windows ME',

'Open BSD' => 'OpenBSD',

'Sun OS' => 'SunOS',

'Linux' => '(Linux)|(X11)',

'Mac OS' => '(Mac_PowerPC)|(Macintosh)',

'QNX' => 'QNX',

'BeOS' => 'BeOS',

'OS/2' => 'OS/2',

'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)'

);

// Loop through the array of user agents and matching operating systems

foreach($OSList as $CurrOS=>$Match)

{

// Find a match

if (eregi($Match, $_SERVER['HTTP_USER_AGENT']))

{

// We found the correct match

break;

}

}

// You are using ...

echo "You are using ".$CurrOS;

?>


查看完整回答
反对 回复 2019-12-04
?
智慧大石

TA贡献1946条经验 获得超3个赞

//这将为您提供帮助


$uagent = $_SERVER['HTTP_USER_AGENT'] . "<br/>";


function os_info($uagent)

{

    // the order of this array is important

    global $uagent;

    $oses   = array(

        'Win311' => 'Win16',

        'Win95' => '(Windows 95)|(Win95)|(Windows_95)',

        'WinME' => '(Windows 98)|(Win 9x 4.90)|(Windows ME)',

        'Win98' => '(Windows 98)|(Win98)',

        'Win2000' => '(Windows NT 5.0)|(Windows 2000)',

        'WinXP' => '(Windows NT 5.1)|(Windows XP)',

        'WinServer2003' => '(Windows NT 5.2)',

        'WinVista' => '(Windows NT 6.0)',

        'Windows 7' => '(Windows NT 6.1)',

        'Windows 8' => '(Windows NT 6.2)',

        'Windows 8.1' => '(Windows NT 6.3)',

        'Windows 10' => '(Windows NT 10.0)',

        'WinNT' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',

        'OpenBSD' => 'OpenBSD',

        'SunOS' => 'SunOS',

        'Ubuntu' => 'Ubuntu',

        'Android' => 'Android',

        'Linux' => '(Linux)|(X11)',

        'iPhone' => 'iPhone',

        'iPad' => 'iPad',

        'MacOS' => '(Mac_PowerPC)|(Macintosh)',

        'QNX' => 'QNX',

        'BeOS' => 'BeOS',

        'OS2' => 'OS/2',

        'SearchBot' => '(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)'

    );

    $uagent = strtolower($uagent ? $uagent : $_SERVER['HTTP_USER_AGENT']);

    foreach ($oses as $os => $pattern)

        if (preg_match('/' . $pattern . '/i', $uagent))

            return $os;

    return 'Unknown';

}

echo os_info($uagent);



查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 958 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信