Яндекс.Метрика

    Системное администрирование

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

    Допустим у вас куча офисов, в каждом из которых стоит 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 для картинок, добавил дату окончания лицензии и количество лицензий. Выглядит очень симпатично.