Как стать автором
Обновить

Мониторинг ESET NOD32

Время на прочтение3 мин
Количество просмотров4.6K
Допустим у вас куча офисов, в каждом из которых стоит ESET NOD32 и есть OpenVPN для связи. При этом в каждом офисе будет один компьютер, на котором будет установлена лицензия и который будет закачивать обновления, остальные антивирусы будут закачивать обновления с него. После установки лицензии становится доступным обновление по HTTP (в нашем случае указываем в настройках порт 8081).

Суть метода заключается в скачивании файла update.ver антивируса NOD32
через встроенный HTTP-сервер для раздачи обновлений. Реализация написана
на php+gd. В случае возникновения ошибки выводится расшифровка ошибки.

В любом случае ознакомьтесь что такое ESET Remote Administrator (ERA) — иногда все-таки лучше использовать готовые решения (правда за деньги).


Я использовал шрифт terminal6.gdf, который вы с легкостью можете найти в интернете. И еще одно важное замечание, служба ESET HTTP Server должна быть запущена.

В папке на вебсервере нам понадобятся следующие файлы:
index.php:
<?php
 
  if (isset($_GET['host']))
    $host = $_GET['host'];

 
  $url =  "/update.ver";
 
  $text = "";
  if ($fp = fsockopen($host, 8081, $errno, $errstr, 20))
  {
    // открываем файл, представляясь браузером
    $out = "GET $url HTTP/1.0\r\n";
    $out .= "Host: $host\r\n";
    $out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n";
    $out .= "Accept: */*:\r\n";
    $out .= "Pragma: no-cache\r\n";
    $out .= "Cache-Control: no-cache\r\n";
    $out .= "Connection: close\r\n\r\n";
    fputs($fp, $out);

    // получаем ответ от сервера
    $content = '';
    while(!feof($fp))
    {
      stream_set_timeout($fp, 10);
      $content .= fgets($fp, 4096);
      $status = socket_get_status($fp);
      if ($status['timed_out'])
        break;
    }
 
    fclose($fp);

    // шаблон для поиска
    // \d означает любая цифра
    $pattern = '/version=(\\d\\d\\d\\d)\ \((\\d\\d\\d\\d\\d\\d\\d\\d)\)/';
    preg_match_all($pattern, $content, $matches, PREG_OFFSET_CAPTURE);

    $count = count($matches[0]);
    if (!$count)
    {
      // если ничего не нашли - вводим другой шаблон
      $pattern = '/versionid=(\\d\\d)(\\d\\d)/';
      preg_match_all($pattern, $content, $matches, PREG_OFFSET_CAPTURE);
      $count =count($matches[0]);
    }
 
    // вычленяем нужную нам информацию об обновлении
    $ar = array();
    for ($i=0;$i<$count;$i++)
     $ar[$i] = strval($matches[1][$i][0])."-".strval($matches[2][$i][0]);

     // теперь сортируем все вхождения, отбирая наиболее последнюю версию       
    rsort($ar);
    $text = $ar[0];
  }
  else 
    $text= "$errstr ($errno)";
 
    // версию получили, теперь можно её выводить
    $font = imageloadfont('fonts/terminal6.gdf');
 
    $fontWidth = imagefontwidth($font);
    $fontHeight = imagefontheight($font);

 
    $im = imagecreate(strlen($text) * $fontWidth, $fontHeight);
    $bgColor = imagecolorallocate($im, 255, 255, 255);
    $fgColor = imagecolorallocate($im,   0,   0, 255);
    imagestring($im, $font, 0, 0, $text, $fgColor);
    header('Content-Type: image/png');
    imagepng($im);
    imagedestroy($im);
 
?>


.htaccess
AddHandler application/x-httpd-php .png


ufa.png:
<?
  $host="192.168.2.250";
  require_once "index.php";
?>


krasnodar.png:
<?
  $host="192.168.93.250";
  require_once "index.php";
?>


и др. .png файлы для регионов

Для себя я сделал еще один файлик (который, кстати, можно хранить на другом сервере) в котором просто вставил HTML для картинок, добавил дату окончания лицензии и количество лицензий. Выглядит очень симпатично.
Теги:
Хабы:
Всего голосов 2: ↑2 и ↓0+2
Комментарии4

Публикации

Истории

Работа

Ближайшие события