#!/usr/bin/perl # # Скрипт создания зеркала обновления вирусных баз NOD32 # # Copyright (C) 2007-2009 Information Networks Ltd. # http://www.hsdn.org # ICQ: 980001 # $LOGIN = 'EAV-'; # логин $PASS = ''; # пароль $PATH = "/home"; # папка хранения зеркала $TMP = "/tmp"; # папка хранения временных файлов # Серверы обновления %servers = ( 'http://um15.eset.com', 'http://um16.eset.com', 'http://um10.eset.com' ); %versions = ('eset_upd', 'nod_upd', 'eset_upd/sky', 'eset_upd/pre', 'eset_upd/v4/pre', 'eset_upd/v4', 'eset_upd/v4/sky'); # версии nod32 foreach $URL_UPD (%servers) { if($URL_UPD) { foreach $NUPD (%versions) { if($NUPD) { print "Using $URL_UPD/$NUPD...\n"; unlink("$TMP/$NUPD.ver", "$PATH/$NUPD/update.ver"); download($PATH, "$URL_UPD/$NUPD/update.ver", "/$NUPD/update.ver", $LOGIN, $PASS); system("/usr/local/bin/unrar e -y $PATH/$NUPD/update.ver $TMP"); $DIR = "$TMP/$NUPD"; $DIR =~s/(.*)\/([^\/]+)$/($1)/e; system("mkdir -p $DIR"); rename("$TMP/update.ver", "$TMP/$NUPD.ver"); $ver = "$TMP/$NUPD.ver"; open(VER, "< $ver") or die "Couldn't open $ver for reading: $!\n"; %files = (); %urls = (); $end = 0; while (defined($line = ) ) { chomp $line; if ($line =~ /COMPATLIST/) { $end = 1; } if ($end == 0) { ($par,$val) = split /=/, $line; $val = substr($val, 0, -1); if ($par =~ /file/) { $name = $val; $furl = "$URL_UPD$val"; $line = "file=$name"; } if ($par =~ /size/) { $size = $val; $files{$name} = $size; $urls{$name} = "$furl"; } } } print "\n"; close(VER); foreach $f (keys %files) { if ((-s "$PATH$f") != $files{$f}) { $size = (-s "$PATH$f"); print "$URL_UPD/$NUPD Not present --> $PATH$f\t$f\t$files{$f} ---> $size\n"; unlink("$PATH$f"); download($PATH, $urls{$f}, $f, $LOGIN, $PASS); } else { print "$URL_UPD/$NUPD Present --> $PATH$f\t$f\t$files{$f}\n"; } } chmod(0644, "$PATH/*"); sub download() { my ($path, $url, $f, $login, $pass) = @_; $dir = $f; $dir =~s/^(.*)\/(.*)$/$1/; system("mkdir -p $path/$dir"); system("/usr/local/bin/wget -P $path/$dir --proxy-user=user --http-user=$login --http-password=$pass $url"); } } } } }