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