Чтобы каждый компьютер в локальной сети не выкачивал самостоятельно обновления ESET NOD антивирус был написан этот скрипт. Идея взята отсюда http://forum.lissyara.su/viewtopic.php?t=8924

Исходные коды прилагаются. Сам скрипт расположен в папке /!nod32upd, обновления складываются в /var/www/html (т.е. в папку web сервера для общего доступа)

файл start.sh служит для запуска скрипта, для выполнения автоматического обновления его необходимо прописать в cron.

cd /!nod32upd/ && /usr/bin/php -q nod32upd.php

файл 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 на необходимый.

Вопросы, пожелания, предложения приветствуются.