Подтвердить что ты не робот

Обнаружить точную версию ОС из браузера

Мне было интересно, есть ли способ определить точную версию операционной системы из моего браузера с помощью PHP/JS/ASP?

Я знаю, что могу определить тип ОС (Windows XP, Windows Vista, OS X и т.д.), но мне нужно определить точную версию: Vista Business, Vista Ultimate, Windows XP Home, Windows XP Pro и т.д..

4b9b3361

Ответ 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