Jump to content
iT4iT.CLUB

Search the Community

Showing results for tags 'licenses'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Operating systems
    • UNIX
    • Mac OS
    • Windows
  • Monitoring System
    • Zabbix
  • Network hardware
    • Cisco Systems
    • MikroTik
    • Ubiquiti Networks
  • Microcontrollers
    • Arduino

Blogs

There are no results to display.

There are no results to display.

Calendars

  • Community Calendar

Categories

  • Zabbix
    • Templates
  • Arduino
    • Espressif Systems
    • Libraries
  • UNIX

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Found 1 result

  1. Всем доброе время суток. Сегодня пойдет речь об одном из вариантов сбора информации о лицензиях операционных системах Windows и некоторого сопутствующего программного обеспечения. Для сбора будет использована утилита ProduKey, это далеко не идеальный вариант, но вполне приемлемый, если нет иных средств мониторинга, и требуется что-то быстро слепить на коленке без траты денег. И так, имеется группа компьютеров находящихся в домене, подсеть 10.10.10.0/24, ProduKey запускается от учетной записи администратора домена или администратора той ветки, к которой принадлежит подсеть. Программой можно пользоваться как в графическом интерфейсе, так и в консольном режиме. Последний вариант, лично для меня, более предпочтителен. ВАЖНО: нам требуется программа только на Английском языке т.к имена ключей использующихся в отчетах должны соответствовать именам ключей в PHP скрипте далее. В корне с программой создаем .bat файл со следующим содержимым produkey.exe /iprange 10.10.10.2 10.10.10.254 /sjson 10.10.10.0.json /WindowsKeys 1 /OfficeKeys 1 /SQLKeys 1 /IEKeys 0 /ExchangeKeys 1 /ExtractEdition 0 Используемые параметры /iprange - указывает диапазон адресов для сканирования /sjson - файл отчета необходимо сохранить в формате json /WindowsKeys 1 - собирать ключи операционных систем /OfficeKeys 1 - собирать ключи Office /SQLKeys 1 - собирать ключи SQL сервера /IEKeys 0 - НЕ собирать ключи IE /ExchangeKeys 1 - собирать ключи Exchange /ExtractEdition 0 - НЕ собирать расширенную информацию об операционной системе Это один из вариантов запуска, большее количество параметров описано на сайте разработчика. После того, как утилита закончит свою работу, она сохранит отчет в формате json в указанный нами файл. Можно использовать и другие форматы отчетов, но явного представления о количестве и качестве мы не получим. Программа только собирает данные, все остальные манипуляции с ними ложатся на плечи рядовых администраторов. Но не беда, на помощь нам приходит, уже затертый до дыр, Apache + PHP. Все файлы отчета помещаем на машину, где установлены эти ребята, и обязательно за пределами Web сервера. Сам PHP скрипт будет выглядеть следующим образом. <?PHP if(false) { ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); } $myKeys = array( 'XXXXX-XXXXX-XXXXX-XXXXX-XXXXX' => 'Управляющая компания', 'YYYYY-YYYYY-YYYYY-YYYYY-YYYYY' => 'Завод №1', 'ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ' => 'Складская зона', ); $info = array(); /* Тут указываем путь и шаблон поиска файлов отчетов (Here we specify the path and template for finding report files) glob("../../../info/log_*.json") glob("/var/log/*.json"; glob("*.json"); */ foreach(glob("*.json") as $file) { $json = str_replace(array("\r\n", "\n"), '', file_get_contents($file)); $json = json_decode(iconv('cp1251', 'utf-8', $json), true); if(is_array($json)) { foreach($json as $id => $obj) { if(preg_match_all('/(.+) \((.+)\)/m', $obj['Computer Name'], $host)) { $ip =& $host[2][0]; $name =& $host[1][0]; $net = explode('.', $ip); array_splice($net, 3); array_push($net, '0'); if($ip == $name) $name = '<u>'.$name.'</u>'; $net = implode('.', $net); $info[$obj['Product Name']][$obj['Product Key']][$net][] = $ip.' ('.$name.')'; } } } } echo '<html lang="ru-RU" dir="ltr">'; echo '<head>'; echo '<style type="text/css">body {cursor: default;} i b:hover {color: forestgreen; text-decoration: underline;} #host:hover {color: forestgreen;}</style>'; echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>'; echo '</head>'; echo '<body>'; echo '<pre>'; $uSoft = 0; $uKey = 0; $uNet = 0; foreach($info as $software => $keys) { $uSoft++; echo "<b style='font-size: large; cursor: pointer;' onclick=\"if($('div#s".$uSoft."').is(':visible')) $('div#s".$uSoft."').hide(400); else $('div#s".$uSoft."').show(400);\">".$software."</b> <i style='font-size: normal;'>(licenses: ".count($keys).")</i>\n"; echo "<div id='s".$uSoft."' hidden>"; asort($keys); foreach($keys as $key => $subnet) { $uKey++; if(!$key) $key = 'UNKOWN'; echo "\t<i><b style='cursor: pointer; color: forestgreen;' onclick=\"if($('div#k".$uKey."').is(':visible')) $('div#k".$uKey."').hide(400); else $('div#k".$uKey."').show(400);\">".$key."</b> (hosts: ".(count($subnet, COUNT_RECURSIVE) - count($subnet)).")</i> <b style='color: red;'>".(isset($myKeys[$key])? $myKeys[$key] : '')."</b>\n"; echo "<div id='k".$uKey."' hidden>"; foreach($subnet as $net => $host) { $uNet++; echo "\t\t<i><b style='cursor: pointer;' onclick=\"if($('div#n".$uKey.$uNet."').is(':visible')) $('div#n".$uKey.$uNet."').hide(400); else $('div#n".$uKey.$uNet."').show(400);\">".$net."</b> (hosts: ".count($host).")</i>\n"; echo "<div id='n".$uKey.$uNet."' hidden style='padding-bottom: 10px;'>"; foreach($host as $name) echo "\t\t\t<span id='host'><i>".$name."</i></span>\n"; echo "</div>"; } echo "</div>"; } echo "</div>\n"; } echo '</pre>'; echo '</body>'; echo '</html>'; ?> Просто и сердито. На выходе мы получаем каталогизированный список программного обеспечения, используемых ключей и списка хостов на которых были найдены эти ключи с сортировкой по сетям. Также в скрипте можно указать список ключей и дать им имена. $myKeys = array( 'XXXXX-XXXXX-XXXXX-XXXXX-XXXXX' => 'Управляющая компания', 'YYYYY-YYYYY-YYYYY-YYYYY-YYYYY' => 'Завод №1', 'ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ' => 'Складская зона', ); Удобно если требуется явно указать на какие подразделения или объекты приобреталась та или иная лицензия. Все совпадения будут выделены красной подписью. Выводы Из плюсов, это явная простота и стоимость данного решения. Начальную статистику можно получить уже через пару часов после поднятия вопроса о необходимости иметь результат еще вчера. Наглядность представления. Можно добавить расчет стоимости поддержания данного софта в "деревянных" или сразу в "бакинских", ну и естественно принять соответствующие меры, какие, решать уже Вам. Из минусов, это не 100% результативность т.к статистика будет получена только по тем машинам, которые были онлайн на момент сканирования. Отсутствие системы кэширования для накопления данных при периодических опросах сети. Хотя последнее можно исправить средствами PHP, но пока такая задача не ставилась.
×
×
  • Create New...