Скрипт по обновлению антивирусных баз NOD32 под Linux (PHP)
Вот портировал скрипты по обновлению антивирусных баз NOD32 V2* и V3* в PHP.
Содержание
Версии скрипта
Буду тут выкладывать описание версий с датами для более удобного отслеживания за изменениями
- Версия 2.0 от 2.11.2011
- Удалена загрузка файлов через php fopen(). Из-за того, что не может работать через авторизованные прокси.
- Настроена работа через php curl и wget.
- Версия 2.0b от 20.10.2011
- Добавлена загрузка баз V5
- Доработка мелких замечаний.
- Версия 1.22 от 4.05.2011
- Исправлена ошибка, если в update.ver некоторые параметры передаются в кавычках.
- Версия 1.21 от 12.08.2010
- Добавлена закачка файлов нового модуля обновлений ESET "File system protection Module".
- Версия 1.20 от 21.07.2010
- Исправлена ошибка вывода в консоль, если файл update.ver не скачен (На нормальную работу не влияет).
- Версия 1.19 от 25.06.2010
- Возвращена возможность закачки с помощью wget.
- Теперь можно указать в файле настроек - какие компоненты качать (пока русские и английские).
- Версия 1.18 от 6.04.2010
- Исправлена ошибка по выкачиванию программных компонентов.
- Теперь можно указать в файле настроек - качать или нет программные компоненты.
- Если у Вас пароль от EAV, а не от ESS, то указав это в файле настроек, больше не будет возникать ошибки выкачивания файлов.
- Версия 1.17 от 11.03.2010
- Добавил по просьбе Boevik с форума возможность работать и с unrar v3.91 с сайта http://rarlab.com/download.htm.
- Версия 1.16 от 2.02.2010
- Добавил по просьбе Angpeu с форума в update.ver переменную all_in_one для случая, если для доступа к файлам обновлений нужен пароль, а файл update.ver и файлы обновлений находятся в одной директории.
- Версия 1.15 от 25.01.2010
- Убрал сравнение выкаченного файла и данных из update.ver по размеру.
- Данные о размера файла теперь берутся не из секции update.ver, а из реального размера файла.
- Версия 1.14b от 5.11.2009
- Добавлены новые секции для SELFDEFENSE64 и необязательные секции для компонентов для V3 и V4. Те если компоненты будут лежать в директории с обновлениями, а в update.ver нет на них ссылок, то они стираться не будут и будут добавлены в update.ver.
- Устранена ошибка при скачивании обновлений со свободных зеркал, где update.ver лежит вместе с файлами обновлений.
- Добавлена проверка на наличие модулей php-rar или unrar.
- Версия 1.13 от 25.10.2009
- Добавлены новая секция для закачки MAILSERVER.
- Версия 1.12d от 25.09.2009
- Попробовал исправить большинство ошибок при error_reporting = E_ALL в php.ini.
- Добавлены новые секции для закачки
- Версия 1.11 от 10.09.2009
- Исправлено несколько синтаксических ошибок.
- Исправлена ошибка по коду возврата GNU архиватора unrar.
- Не работал цикл по обновлению с другого сервера, если на первом прошла ошибка.
- Версия 1.10b от 13.07.2009
- Изменен архиватор rar на GNU версию unrar путь до архиватора вынесен в setup.php.
- При изменении версии или ошибке, письмо приходит только одно на обе версии базы.
- Версия 1.9b от 11.07.2009
- Закачка через wget изменена на php-cURL.
- Добавлен тихий режим, без отправки сообщений в консоль, если критических ошибок нет
- Если сервер указан, то пытается обновится только с него. Если не указан сервер (это касается только тех кто обновляется с официальных серверов), то список серверов берется из update.ver и скрипт пробует обновить базы с каждого сервера из этого списка, пока не получится. А то иногда бывает проблема с серверами (похоже из-за их перегрузки) - то их видно, то нет.
- Версия 1.8 от 1.07.2009
- Добавлена возможность закачивать файлы через прокси сервер с аутентификацией и без нее.
- Добавлена возможность отсылки дополнительного письма об обновлении баз на указанный п/я, в случае ошибки или удачного обновления с изменением версии.
- Версия 1.7 от 24.06.2009
- Имя пользователя, от которого работает WEB сервер вынесено в setup.php
- В начале скрипта umask меняется на 0022, а после выполнения возвращается на ту, что была до его выполнения.
- Версия 1.6 от 19.06.2009
- Если происходит ошибка при выкачивании файла, то обновление сразу завершается и восстанавливает базу данной версии Нода, которая была до этого. Раньше скрипт пытался выкачивать остальные файлы, а потом все равно происходило восстановление.
- Версия 1.5 от 16.03.2009 Теперь можно обновлять базы для NOD32 V4.
- Добавлены секции, которых не было в вервии V3 [SYSTEMSTATUS0], [SYSTEMSTATUS1],[SYSTEMSTATUS2],[SYSTEMSTATUS640],[SYSTEMSTATUS641],[SYSTEMSTATUS642],[SELFDEFENSE0],[SELFDEFENSE1],[SELFDEFENSE2],[SELFDEFENSE640],[SELFDEFENSE641],[SELFDEFENSE642]. Обновляется только файл секций section.php.
- Версия 1.4 от 21.01.2009
- Исправлена ошибка записи имени файла в создаваемой update.ver, если этого файла еще не было.
- Версия 1.3 от 16.01.2009
- Если при обновлении NOD32 V2 происходила ошибка, то она не сбрасывалась и для NOD32 V3
- Не правильно формировался блок [data0001] в файле update.ver в NOD32 V3, если в этой секции встречался знак =.
- Убрано отображение некоторых ненужных сообщений.
- Версия 1.2 от 2.12.2008
- Исправлено удаление файла, если он уже не нужен
- Версия 1.1 от 18.11.2008
- Первая версия.
Что умеет скрипт.
Умеет все тоже, что и скрипт на bash, только работает быстрее, один скрипт может обновлять обе версии и можно использовать на любой платформе (сам не пробовал) .
- Обновляет базы с официальных и бесплатных серверов NOD32 (для официальных серверов нужно задать имя и пароль для обновления). Причем, при обновлении с бесплатных серверов скрипт пробует обновится со всех серверов, указанных в update.ver и прекращает работу при первом удачном обновлении.
- Может работать через прокси сервер с аутентификацией и без нее.
- Может отправлять сообщение на указанный п/я с информацией об ошибке или при удачном обновлении с изменением версии базы.
- Обновляет сразу базы для V2, V3 и с версии 2.0b - V5, но может и отдельно.
- Если на сервере названия файлов не совпадают с локальными - не качает, а переименовывает файлы.
- Сам создает файл update.ver. Те при обновлении с зеркал обновляются только компоненты с более новыми версиями.
- Автоматически создает папки, нужные для работы программы, в том числе и для Web сервера.
- Создает папку на веб сервере с файлами обновления.
- При ошибке обновления восстанавливает базу в том виде, которая была до обновления.
Скрипт автоматически создает папки для временного хранения копий баз /var/lib/nod32/mirror_V2, /var/lib/nod32/mirror_V3 /var/lib/nod32/mirror_V5 и загружает туда файлы антивирусных баз. Если обновление прошло успешно, то переписывает базы в WEB директорию, а если произошла ошибка, то наоборот, восстанавливает базы, переписывая их из WEB директории в папку временного хранения.
Спасибо Kode - использовал его функции. Так как не очень большой спец в PHP, то прошу не пинать, а если можно то помочь доработать.
Из чего состоит
- update.php - Сам скрипт
- function.php - Файл функций
- section.php - Файл описания секций
- setup.php - Файл установок
Инсталяция
Установка UNRAR
Внимание: Эту программу нужно выполнять только при отсутствии расширения php-rar
Установка GNU unrar
1. Идем на сайт https://gna.org/projects/unrar/ далее в Download и выкачиваем архив unrar-0.0.1.tar.gz.
2. Распаковываем его и устанавливаем.
cp unrar-0.0.1.tar.gz /usr/local/src cd /usr/local/src tar -xzf unrar-0.0.1.tar.gz cd unrar-0.0.1 ./configure make make install
После этого архиватор unrar будет в каталоге /usr/local/bin
Установка unrar v3.91
Установку данного архиватора можно произвести через репозитарии или порты
Например, для Mandriva 2010
#urpmi unrar
Или из исходников смотри тут.
Установка php расширений
- Устанавливаем пакеты php-cli.*.rpm и php-rar*.rpm. Для версии 1.9в и выше нужен php-curl*.rpm.
Установка скрипта
- Выкачиваем архив nod_upd_php_v2.0b.tar.bz2) и распаковываем в любой каталог, например, /etc/upd_prog/.
- Редактируем файл setup.php для каждого варианта антивируса - Устанавливаем:
- Измените, если нужно, путь до папки, где будут храниться временные файлы работы скрипта, например (define("DEFAULT_SAVE_PATH","/var/lib/nod32");).
- Отредактируйте, если нужно, имя пользователя от которого работает WEB сервер, например, define("HTTP_USER", "apache");.
- Если не установлен модуль php-rar, устанавливаем unrar и разкоментируем строки, где указываем путь до unrar.
- Если нужна закачка с помощью wget, то разкоментируем строку ($download_pr="wget";). Если она закоментирована, будет использоваться php-curl.
- Если нужна, дополнительная отправка почты, то разкоментируйте строку с переменной $user_mail и укажите там нужный email. (Но при этом дб настроен и запущен почтовый сервер (postfix, sendmail или другой).)
- Если у Вас не установлено расширение php-rar - укажите путь до команды unrar.
- Если Вы хотите или должны использовать HTTP-Proxy, пожалуйста, разкоментируйте строку с переменной $proxy и укажите свои параметры Прокси сервера, например, $proxy = 'http://vasya:qwerty@www.rrr.ru:8080';.
- Установите $quit=1 - не отображать сообщения на консоли, кроме сообщений об ошибках и $quit=0 - отображать сообщения на консоли (только для версии 1.9в).
- Имя пользователя, для всех верверов прописываем, например, $userV2='EAV-5075555'; или '$userV2=""; - для бесплатных серверов
- Пароль, например, $pswV2='kd3m4567'; или $pswV2=; - для бесплатных серверов
- Для каждой версии сервера настраиваем:
- Адрес сервера, например ('host'=>'http://89.202.157.139/',). Если он не указан, то список серверов берется из update.ver (для официальных серверов), если указан, то закачка происходит только с него.
- Web каталог для каждой версии баз, например, 'www'=>'/var/www/nod32/',.
- Если используется имя и пароль для доступа к базам, а файл update.ver и файлы бызы лежат в одной директории на сервере, с которого скачиваются обновления, тогда 'all_in_one'=>1. Для официальных серверов 'all_in_one'=>0.
- Программные компоненты, тут комментируем строки с ненужными программными компонентами, то они выкачиваться не будут, а если были до этого выкачаны, то будут удалены. Я, например, для V2 оставил все программные компоненты, а для V3 - нет, тк размер файлов компонентов для V3 более 80Mb, а я постоянно переписываю базы на флешку и мне эти 80 Mb не нужны. Те решайте сами - нужны они или нет. К тому же на Офе лежат старые версии компонентов.
- Версия пароля для обновлений. Если у Вас логин и пароль для EAV - укажите 'ess'=>0, если от ESS, то 'ess'=>1.
- Пробуем из под root запустить файл update.php.
- Теперь в crontab прописываем запуск скрипта
# Обновление баз NOD32* 00 09,15 * * * root /etc/upd_prog/php/update.php
и наслаждаемся автоматическим обновлением 2 раза в сутки