NOD32 AMC - automatic mirror creater

Статус
В этой теме нельзя размещать новые ответы.

admLoki

генератор случайного PHP
Регистрация
14 Сен 2006
Сообщения
481
Реакции
104
Вчера лазил по интернету, нашел скрипт на перле для создания логального зеркала обновлений NOD32 .
Он мне не понравился, поэтому написал его же, но на PHP :) .
Один минус - пока не дописал возможность создания зеркала с официалки, но это временно :-] .
Запускать сей скрипт лучше с консоли, либо кроном .

PHP:
<?php

/**
 * @name NOD32 AMC - automatic mirror creater
 * @version 1.1
 * @author CodexFactory
 * @uses PHP5
 * @uses sockets
 */

set_time_limit(0); //На всякий случай .

class nod32upd
{
    /**
     * Данный класс автоматически загружает файлы для обновления NOD32 с серверов-зеркал .
     * На данный момент авторизация на официальных серверах не имплементирована .
     * Необходимые переменные :
     *
     * @var string $server Удаленный сервер
     * @var string $save_path Путь для сохранения файлов
     * @var string $handler Не трогать вообще .
     * @var array $updfiles Аналогично .
     */
    public $server = 'http://nod32.vareza.net/';
    public $save_path = '/webprojects/localhost.lan/public_html/nod32upd/';
    private $handler = '';
    private $updfiles = array();
    #private $login = ''; //Will be implemented soon
    #private $password = ''; //Will be implemented soon
    
    /**
     * Конструктор
     *
     * @return none
     */
    public function nod32upd()
    {
        //Contructor
        $this->checkUPDFiles();
    }
    
    /**
     * Парсит файл update.ver и заносит данные в массив класса
     * @param none
     * @return null
     */
    private function getNparse()
    {
        $this->handler = file_get_contents($this->server . 'update.ver');
        preg_match_all("/file\=(.*)\n/",$this->handler,$file_parse);
        $file_parse = array_pop($file_parse);
        
        foreach($file_parse as $k => $v)
        {
            $this->updfiles[] = trim($v);
        }
    }
    
    /**
     * Проверяет, актуально ли текущее зеркало и качает обновление при необходимости .
     * По пути удаляет старые файлы .
     * @param none
     * @return null
     */
    private function checkUPDFiles()
    {
        if(count($this->updfiles == 1))
        {
            $this->getNparse();
        }
        
        if(file_exists($this->save_path . 'update.ver'))
        {
            if(crc32($this->handler) != crc32(file_get_contents($this->save_path . 'update.ver')))
            {
                @unlink($this->save_path . 'update.ver');
                $fd = opendir('.');
                while($file = readdir($fd))
                {
                    if(preg_match("/.+?\.nup/",$file))
                    {
                        @unlink($file);
                    }
                }
                @file_put_contents($this->save_path . 'update.ver',$this->handler);
                $this->getFiles();
            }
            else 
            {
                print('All right.');
            }
        }
        else 
        {
            @file_put_contents($this->save_path . 'update.ver',$this->handler);
            $this->getFiles();
        }
    }
    
    /**
     * Измененный алиас к saveContent()
     * @see saveContent
     * @param none
     * @return null
     */
    private function getFiles()
    {
        foreach ($this->updfiles as $k => $v)
        {
            $this->saveContent($this->server . $v,$this->save_path . $v);
        }
    }
    
    /**
     * Достает контент файла и инкрементно пишет его в новый файл .
     * @param string $host Remote host
     * @param string $path Remote file
     * @return bool true|false
     */    
    private function saveContent($path,$destination)
    {
        $fh = fopen($path,'r');
        $fw = fopen($destination,'w+');
        if(!$fh)
        {
            die('Cannot open remote file - 404/403 error or wrong URL');
        }
        while($fr = fread($fh,8012))
        {
            fwrite($fw,$fr);
        }
        print($path . "successfully downloaded .");
        unset($fr);
        fclose($fh);
        fclose($fw);
        return true;
    }    
    
}

/**
 * Создаем обьект .
 */
$do = new nod32upd();

?>
 
Есть ли чтото подобно для касперского? Для 6-7 версии
 
Не наблюдал .
 
Пока что только это нашёл



А вообще Kaspersky Internet Security 6.0.2.614ru хорошо зеркало обновления делает.
 
nod32.vareza.net не пашет больше. Может поправишь?
 
Используй любое другое зеркало.
 
А прикрутить авторизацию по логину\пассу на оффициальных серваках можешь?
 
Ну как успехи?
А то что сервак будет лезть на официалку его не забанят?

П.С. В нем нет юзер агента NOD32 Update
 
Ну как успехи?
А то что сервак будет лезть на официалку его не забанят?

П.С. В нем нет юзер агента NOD32 Update
Успехи есть, есть и проблемы.
Дело в том, что на официалке update.ver является RAR-файлом, т.е. на сервере вы должны будете иметь бинарник unrar и доступ на его выполнение.

Щас пока завален работой, сделаю на днях - там осталась тока одна проблема с путями и все.
 
  • Нравится
Реакции: dobs
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху