Обнаружить точную версию ОС из браузера
Мне было интересно, есть ли способ определить точную версию операционной системы из моего браузера с помощью PHP/JS/ASP?
Я знаю, что могу определить тип ОС (Windows XP, Windows Vista, OS X и т.д.), но мне нужно определить точную версию: Vista Business, Vista Ultimate, Windows XP Home, Windows XP Pro и т.д..
Ответы
Ответ 1
Короткий ответ: Вы не можете.
Длинный ответ:
Все, что у вас есть, это информация в заголовке User-Agent HTTP, которая обычно содержит имя и версию ОС.
Обычно браузеры, работающие на Mac OS и Linux, отправляют достаточно информации для определения точной ОС. Например, здесь заголовок User-Agent:
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; 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; ru-us) AppleWebKit/528.16 (KHTML, например, Gecko) Версия /4.0 Safari/528.16
Windows браузеры, с другой стороны, обычно сообщают только о версии ОС, а не о конкретном пакете (Pro, Business и т.д.):
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv: x.x.x) Gecko/20041107 Firefox/x.x
Ответ 2
После некоторого googling я нашел этот код и, похоже, работает нормально (не обнаруживает 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;
?>
Ответ 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);
Ответ 4
В классическом ASP и ASP.NET используйте
Request.ServerVariables("HTTP_USER_AGENT")
Это лучше всего работает, поскольку он не интерпретируется кодом, это выполняется на сервере.
Ответ 5
Я не думаю, что вы сможете различать разные версии Vista, но вы должны получить ОС от navigator свойство объектной платформы. Вам, вероятно, придется разбирать его, или дифференцировать на основе его содержимого.
<script type="text/javascript">
alert( navigator.platform );
</script>
Смотрите www.w3schools.com учебные пособия для example показывает, как получить все свойства навигатора.
ИЗМЕНИТЬ
Чтобы получить точную версию, вы можете создать элемент управления ActiveX (только для Windows) или Java-апплет и использовать объект java.lang.System для просмотра текущих свойств системы. Вы можете получить достаточную информацию из браузера для систем, отличных от Windows, и использовать элемент управления только для систем Windows. Я не пробовал это, поэтому вам нужно будет поэкспериментировать, чтобы убедиться, что это сработает. Я должен поверить, что элемент управления Microsoft ActiveX для Microsoft Update способен обнаруживать точную версию системы и установленное программное обеспечение для ее работы.
Ответ 6
Вы действительно должны стараться избегать делать что-то подобное, если это абсолютно необходимо для функциональности веб-приложения.
Имейте в виду, что:
Не все запросы могут поступать от клиента, работающего на окнах.
Не все запросы могут поступать от клиента, который поддерживает JavaScript.
Заголовок запроса пользователя может отсутствовать в запросе.
То, что находится в заголовке пользовательского агента, может быть пропущено.
Хорошо спроектированное веб-приложение должно предоставлять полный контент и функциональность независимо от того, что в заголовке пользовательского агента запроса, или если клиент поддерживает javascript или любое другое расширение клиента.
Ответ 7
Как уже говорили другие, нет, не надежно.
Вот почему, например, jquery переключился на систему возможностей браузера (из-за отсутствия лучшего слова) вместо системы браунинга для ее функциональных возможностей.
Ответ 8
Я создал функцию jquery, которая делает это. Таким образом, мы можем отслеживать всю ОС с помощью навигатора.
Надеюсь, кто-то получит помощь от этого:
function find_os_version() {
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("windows nt 5.0") != -1) {
return 'win2k';
}
if (ua.indexOf("windows nt 5.1") != -1) {
return 'winXP';
}
if (ua.indexOf("windows nt 6.0") != -1) {
return 'winVista';
}
if (ua.indexOf("windows nt 6.1") != -1) {
return 'win7';
}
if (ua.indexOf("windows nt 6.2") != -1) {
return 'win8';
}
}
Ответ 9
Это может быть самый простой способ:
Загрузите библиотеку из http://mobiledetect.net
Поместите Mobile_Detect.php в "библиотеки", если используете CI или просто включите его.
Используйте этот код в PHP
$detect = new Mobile_Detect();
// Get the version() of components.
$detect->version('iPad'); // 4.3 (float)
$detect->version('iPhone') // 3.1 (float)
$detect->version('Android'); // 2.1 (float)
$detect->version('Opera Mini'); // 5.0 (float)
Найти документацию по http://dwij.co.in/mobile-os-detection-in-php-codeigniter
Ответ 10
в CodeIgniter вы можете найти библиотеку под названием user_agent. Это даст вам все, что вам действительно нужно. Если вы не используете CI, вы все равно можете "извлечь" код для своей структуры. Надеюсь, это поможет.
http://codeigniter.com/user_guide/libraries/user_agent.html
Ответ 11
Хотя вопрос очень старый, но я просто отвечаю на него:
просто попробуйте:
$this->agent->platform()
это даст вам выход как: Linux, Windows, OS X, etc.
для получения дополнительной информации:
http://ellislab.com/codeigniter/user-guide/libraries/user_agent.html