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

2022-08-30 21:29:28

我想知道是否有一种方法可以使用PHP / JS / ASP从浏览器中检测到确切的操作系统版本?

我知道我可以检测操作系统的类型(Windows XP,Windows Vista,OS X等),但我需要检测确切的版本:Vista Business,Vista Ultimate,Windows XP Home,Windows XP Pro等...


答案 1

简短的回答:你不能。

长答案:

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

通常,在Mac OS和Linux上运行的浏览器会发送足够的信息来识别确切的操作系统。例如,这是我的用户代理标头:

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

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

以下是Firefox和Safari 4 Beta在我的MacBook Pro上的报告:

Mozilla/5.0 (Macintosh;U;英特尔 Mac OS X 10.5;en-US;rv:1.9.0.7) 壁虎/2009021906 火狐/3.0.7

Mozilla/5.0 (Macintosh;U;英特尔 Mac OS X 10_5_6;en-us) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16

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

Mozilla/5.0 (Windows;U;视窗 NT 5.1;en-US;rv:x.x.x) Gecko/20041107 Firefox/x.x


答案 2

经过一些谷歌搜索,我发现了这个代码,它似乎工作正常,(虽然没有检测到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;
?>