Чтобы каждый компьютер в локальной сети не выкачивал самостоятельно обновления ESET NOD антивирус был написан этот скрипт. Идея взята отсюда http://forum.lissyara.su/viewtopic.php?t=8924
Исходные коды прилагаются. Сам скрипт расположен в папке /!nod32upd, обновления складываются в /var/www/html (т.е. в папку web сервера для общего доступа)
файл start.sh служит для запуска скрипта, для выполнения автоматического обновления его необходимо прописать в cron.
файл nod32upd.php — собственно сам скрипт.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | <?php $CONFIG; $NEWUPDLIST; $OLDUPDLIST; $TODOLIST; $PATH = dirname(__FILE__); $WWWDIR = '/var/www/html'; $WWWESET = 'http://update.eset.com'; $USERNAME = 'ваш ключик'; $PASSWORD = 'ваш ключик'; function recursiveDirSize($path) { $size = 0; $ite = new RecursiveDirectoryIterator($path); foreach(new RecursiveIteratorIterator($ite) as $cur) { $size += $cur->getSize(); } return $size; } function WriteToLog($content) { global $PATH; $f=fopen($PATH.'/log.txt','a'); fwrite($f,print_r($content,true)."\r\n"); fclose($f); } function GetNewUpdateFile($dest,$url) { system("wget --timestamping -P ".$dest." ".$url); } function ReadIniTypeFile($filename) { $ini_array = parse_ini_file($filename, true); return $ini_array; } function ChechOldUpdateFile($filename) { if (!file_exists($filename)) { touch($filename); } } function CreateDir($path) //Создание директории { system("mkdir -p ".$path." > /dev/null"); } function PrepareUpdateFile($filename) //Подготовка update.ver для обработки { $file = file_get_contents($filename); $file = str_replace("(", "", $file); $file = str_replace(")", "", $file); //$file = str_replace(" ", "", $file); file_put_contents($filename, $file); } function UnpackFile($source, $dest) { system("unrar x -y ".$source." ".$dest." > /dev/null"); } function WgetUpdFile($source, $dest) { global $USERNAME, $PASSWORD; system("wget --timestamping --http-user=".$USERNAME." --http-password=".$PASSWORD." -P ".$dest." ".$source." > /dev/null"); } //begin CreateDir($PATH.'/tmp'); GetNewUpdateFile($PATH,$WWWESET.'/eset_upd/v4/update.ver'); UnpackFile($PATH."/update.ver",$PATH."/tmp"); PrepareUpdateFile($PATH.'/tmp/update.ver'); ChechOldUpdateFile($PATH.'/tmp/update_old.ver'); WriteToLog('-------------------------------------------------------'); WriteToLog(date('Y-m-d H:i:s')); WriteToLog('-------------------------------------------------------'); $CONFIG = ReadIniTypeFile('nod32upd.conf'); $NEWUPDLIST = ReadIniTypeFile($PATH.'/tmp/update.ver'); $OLDUPDLIST = ReadIniTypeFile($PATH.'/tmp/update_old.ver'); unset($NEWUPDLIST['HOSTS'], $NEWUPDLIST['SETUP'], $NEWUPDLIST['Expire']); unset($OLDUPDLIST['HOSTS'], $OLDUPDLIST['SETUP'], $OLDUPDLIST['Expire']); foreach ($NEWUPDLIST as $newkey => $newvalues) { $isload=false; foreach ($OLDUPDLIST as $oldkey => $oldvalues) { if (($oldkey==$newkey)and($oldvalues['version']==$newvalues['version'])) { $isload=true; } } if ($isload==false) { //echo $newvalues['file']."\n"; $TODOLIST[]=$newvalues['file']; } } if (!empty($TODOLIST)) { WriteToLog('Список обновляемых файлов:'); WriteToLog($TODOLIST); foreach ($TODOLIST as $key => $value) { CreateDir(dirname($WWWDIR.$value)); WgetUpdFile($WWWESET.$value, dirname($WWWDIR.$value)); } unlink($PATH.'/tmp/update_old.ver'); unlink($WWWDIR.'/update.ver'); copy($PATH.'/tmp/update.ver',$PATH.'/tmp/update_old.ver'); copy($PATH.'/update.ver',$WWWDIR.'/update.ver'); $s = recursiveDirSize($WWWDIR); $kb = round($s/1024, 2).' kb'; WriteToLog('Размер папки с обновлениями: '.$kb); } else { WriteToLog('Обновлений нет!'); } ?> |
Для обновления с серверов nod требуется ключик. Где его взять — каждый решает сам 🙂
p.s. скрипт для обновления только 4 версии антивируса, для 5 и 6 думаю что нужно подправить адрес /eset_upd/v4/update.ver на необходимый.
Вопросы, пожелания, предложения приветствуются.