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();

?>
 

CrazyFool

Знаток
Регистрация
11 Июл 2007
Сообщения
170
Реакции
26
Есть ли чтото подобно для касперского? Для 6-7 версии
 

admLoki

генератор случайного PHP
Регистрация
14 Сен 2006
Сообщения
481
Реакции
104
Не наблюдал .
 

CrazyFool

Знаток
Регистрация
11 Июл 2007
Сообщения
170
Реакции
26
Пока что только это нашёл



А вообще Kaspersky Internet Security 6.0.2.614ru хорошо зеркало обновления делает.
 

xdemon

Постоялец
Регистрация
20 Июн 2007
Сообщения
121
Реакции
14
nod32.vareza.net не пашет больше. Может поправишь?
 

admLoki

генератор случайного PHP
Регистрация
14 Сен 2006
Сообщения
481
Реакции
104
Используй любое другое зеркало.
 

xdemon

Постоялец
Регистрация
20 Июн 2007
Сообщения
121
Реакции
14
А прикрутить авторизацию по логину\пассу на оффициальных серваках можешь?
 

dobs

Создатель
Регистрация
5 Янв 2007
Сообщения
40
Реакции
15
Ну как успехи?
А то что сервак будет лезть на официалку его не забанят?

П.С. В нем нет юзер агента NOD32 Update
 

admLoki

генератор случайного PHP
Регистрация
14 Сен 2006
Сообщения
481
Реакции
104
Ну как успехи?
А то что сервак будет лезть на официалку его не забанят?

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

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