госзакупки

Создание зоны обновления на UNIX серверах

Введение

Антивирус Dr.Web обновляется при помощи программы DrWebUpW.exe, находящейся в каталоге %programfiles%\DrWeb. При запуске DrWebUpW обрабатывает последовательно файлы custom.drl и update.drl, лежащие с ним в одной системной папке. В этих файлах указаны зоны обновлений Dr.Web. Затем программа скачивает с первой доступной зоны файл drweb32.lst, в котором содержатся хэши, расположение и команды установки пакетов для обновления. Также необходимо понимать, что существует множество серверов, на которых хранятся базы антивирусов и движки. 

Скрипт

Скрипт, созданный на языке Perl, позволяет обновить базы, движки и компоненты для Dr.Web. Для обновления компонентов необходим действующий лицензионный ключевой файл от любого продукта Dr.Web. Возможно понадобится модуль Zlib для Perl

#!/usr/bin/perl -w
use Digest:MD 5;
use LWP::User Agent;
use Compress::Zlib;
use strict;
my $basedir = '/tmp/update/500'; # папка, в которой происходит обновление виндовых агентов
my $drwebkey = '/home/axel/drweb32-betatesting.key'; - путь к ключу drweb
my $tmpdir = '/tmp'; # зона для временных файлов
my $url = 'http://update.drweb.com/500/sspace/windows'; - одна из директорий обновления Dr.Web
# get MD5 hash of key-file
open(FILE, $drwebkey) or die "Can't open '$drwebkey': $!";
binmode(FILE);
my $md5 = Digest::MD5->new->addfile(*FILE)->hexdigest;
print "MD5 of key-file $drwebkey = $md5\n";
# get Key Number of User
my $userkeynumber = parsekey();
print "Key Number of User $drwebkey = $userkeynumber\n";

# download drweb32.lst
download("$url/drweb32.lst",$basedir.'/drweb32.lst');

# parse drweb32.lst and download
open LST, '<'."$basedir/drweb32.lst" or die "can't open $basedir/drweb32.lst ($!)\n";
while () {
s/\r?\n$//; # remove \r\n, \n
/^\[[\w ]+\]$/ and next;
/^[-]/ and next; #skip delete;
my ( $filename, undef,$crc) = /^[\+\=\@\!].*?([_a-zA-Z0-9\.\-]+)?[, \s](\|.+)?[, \t]+([a-fA-F\d]+)?[, \t]*(\d+\.\d+)?/o
or print STDERR "unknown line \"$_\" in lst\n";
if (checkcrc32("$basedir/$filename",$crc) eq 0){
print "download $url/$filename, $crc\n"; #what try to download
my $ret unless download("$url/$filename","$basedir/$filename",$crc);
}
else {
print "skip $url/$filename, $crc CRC match\n"
 }
 close LST;
sub checkcrc32 {
my ($file,$crc)=@_;
my $crcf=0;
open FHC, '<'.$file or return 0;
$crcf=crc32($_,$crcf) while ;
return 0 if hex($crc) != $crcf;
close FHC;
 return 1;
sub download {
my ($url,$file,$crc)=@_;
my $ua = LWP::UserAgent->new;
$ua->agent("DrWebUpdate-5.00.6.06011 (windows: 6.00.6001)");
$ua->default_header('X-DrWeb-KeyNumber' => $userkeynumber);
$ua->default_header('X-DrWeb-Validate' => $md5);

my $req = HTTP::Request->new(GET => $url);
my $res = $ua->request($req);

if (! $res->is_success) {
print STDERR $res->status_line, " (file $url)\n";
return 0;
}
if ($crc and hex($crc) != crc32($res->content)) {
printf STDERR "file $url with frong crc: %X (expects $crc)\n",crc32($res->content);
return 0;
}
if ( ! open FH, '>'.$file) {
print STDERR "can't open $file ($!)\n";
return 0;
}
print FH $res->content;
close FH;
return 1;
 }
sub parsekey {
my @massivekey;
my $userkeynumber;
open KEY, '<'."$drwebkey" or die "can't open $drwebkey ($!)\n";
while () {
s/\r?\n$//; # remove \r\n, \n
push (@massivekey,$_);
}
close KEY;
my $stringkey = join ('',@massivekey);
if ($stringkey =~ /\[User\]Number=(\d+)/i){
$userkeynumber = $1;
};
 return $userkeynumber - Для тех кто использует прокси: в блок sub download { требуется дописать прокси (из переменных оно не отдается) $ua->proxy(['http'], 'http://address:port'); 

Crontab

 Теперь добавляем задание в crontab, выполняя команду crontab -e:
# drweb update
 0 */1 * * * /home/user/drwebupw.pl

Также для мониторинга крона во время тестовых запусков полезно сделать:
[min] [hour] * * * /home/user/drwebupw.pl > /home/user/drwebupw.log 2>&1
 

Техника

     
     
     
     
     
   

Интернет-магазин DrWeb.Datasystem.ru: поставка лицензионных антивирусных решений Доктор Веб

x
x
x

Мы используем куки (cookies) с целью повышения удобства вашей работы с сайтом.

Продолжая работу с сайтом, вы соглашаетесь с нашей политикой конфиденциальности.