Ne v kontakte Antisocial programmer's blog

Firefox 3 и самоподписанные сертификаты.

Надо сказать, что разработчики FireFox при разработке третьей версии много внимания уделили безопасности. На мой вкус, местами они даже перестарались. Один из таких случаев - сайты, доступные только по HTTPS и с самоподписанными сертификатами. Например, многие хостеры в целях экономии денег для панели управления хостингом сами генерируют и подписывают SSL сертификат. Почему это плохо? Теоретически, любой человек может понаделать таких сертификатов сколько угодно и, соответственно, доверять как благонадежным им нельзя. В то же время это само по себе не представляет никакого вреда.

Так вот, разработчики FF3 почему-то решили, что это плохо и по умолчанию запретили доступ к подобным сайтам. но если нам необходимо туда попасть, то нужно проделать следующие действия:

1) Открыть страницу about:config и установить свойство browser.xul.error_pages.expert_bad_cert равным true. 2) Теперь при заходе на такой сайт на странице с сообщением об ошибке добавится кнопочка “Добавить исключение”. Жмем на нее. 3) В появившемся диалоге жмем на “Получить сертификат” и “Подтвердить исключение безопасности”

Вуаля! Теперь сайт благополучно открывается!

Read more →

Апгрейд

Свершилось! Наконец-то сделал своему компу апгрейд. Ощущения такие, как будто с копейки пересел на бмв. Впрочем, это неудивительно - против новой конфигурации стараявообще ни на что не годится.

Собственно, результаты апгрейда: Процессор: Intel Core2 Duo E8400 - 3 Ghz, 6Mb L2, 1333 Mhz FSB Материнка: Intel DG33FBC Память: Kingston 2*1024, 800 Mhz.

Раньше же стояло: Процессор: Intel CeleronD 2.66 Ghz, 256Kb L2 и не помню какая FSB Мать: ASUS P4P800-VM Память: 4*256Mb от Корсара, не помню частоту, но какая-то совсем уж маленькая :)

Переферию и всякие сидиромы оставил прежними.

Read more →

Финты ICQ...

Так случилось, что именно 1 июля сего года я занялся апгрейдом железа на своем компе. В результате, я на два дня начисто выпал из онлайновой жизни и когда сегодня у меня все заработало настолько, что можно было подумать и о том, чтобы проверить свои дела в онлайне я обнаружил, что ни один асечный клиент не желает коннектиться. Оказывается, умные дяди из AOL перешли на 6 версию протокола, а подавляющее большинство линуксовых клиентов ориентированы на 5. Единственым клиентом, который включил необходимую поддержку и при этом имелся в репозиториях openSUSE 11.0 оказался Pidgin. Честно говоря, не самый плохой вариант, но функционалом, мягко говоря не изобилует…

В прочем, АОЛовцы добились своего - я начинаю думать о переходе на жаббер и перетаскиванию на него всех знакомых и клиентов. А то хрен их знает, в АОЛе, вдруг прибьют вообще все альтернативные клиенты за ненадобностью, что тогда делать? ну их нах.

Как не надо делать сайты автосерфинга или Получаем посетителей на халяву

Есть такая система обмена показами - asurf.net.ru. Идея заключается в том, что после того, как ты просмотришь (под чутким руководством их скриптов) N нужных сайтов, твой адрес заносится в этот список и те, кто будут добавлять свой сайт после вас будут вынуждены посмотреть ваш сайт. В итоге вы получите N просмотров. В целом система оказалась удачной, стала пользоваться популярностью и даже было запущено для аналогичных сервиса на других доменах. Особо замечательным свойством этой системы оказалось то, что она не требует ни регистрации, ни ввода какой бы то ни было капчи… Как вы думаете, какая мысль меня тут же посетила? Правильно, автоматизировать это дело и на халяву рубить посетителей. Ну а если еще и учесть, что на наиболее активно прокручиваемые в системе сайты вешаются сквозняки, в том числе со страничеко с PR5, то идея становится вообще крайне заманчивой. :) Ладно, автоматизировать, так автоматизировать. За пару минут я выяснил, что навигация осуществляется с помощью мета-тега в верхнем фрейме. В итоге выстроилась такая схема вызовов адресов:

0) http://asurf.net.ru/next.php?h=N&url=http://nevkontakte.org.ru
1) http://asurf.net.ru/nextN.php
...
N) http://asurf.net.ru/nextN.php
N+1) http://asurf.net.ru/save.php

N - это количество хитов, которое мы хотим получить. Система поддерживает значения N только 3, 5, 9, 15, 23. Как человек ленивый, я подумал, что пусть даже скриптом, но столько скачиваний делать как-то совсем не здорово. Не долго думая, я попробовал вместо 23 вызовов делать всего 3 и это, как ни странно, сработало! Чуть-чуть поэксперементировав я пришел к выводу, что системе пофигу, сколько раз я загружаю страницу http://asurf.net.ru/nextN.php. При чем настолько пофигу, что если я вызову http://asurf.net.ru/save.php сразу после http://asurf.net.ru/next.php?h=N&url=http://nevkontakte.org.ru, то система все равно будет считать, что я честно посмотрел всю ту чушь, что полагается! B) Теперь дело осталось за малым. За пол-часа я наваял первую версию скрипта, который будет автоматом делать все необходимое.

<?php
/**
 * AClicker 1.1
 * Asurf.net.ru auto surfing script by Alek$
 * http://nevkontakte.org.ru
 */
/**
 * Запрещается модифицировать данный скрипт без разрешения автора.
 */
// Usage [hits] [site] [promos]

// Define log entries types
define('ST_INFO', "Information");
define('ST_WARN', "Warning");
define('ST_ERROR', "Error");

// Include curl http library
require_once("http.php");

// Init argv[]
if(empty($argv))
{
    $argv = explode('S', $_REQUEST['q']);
    array_unshift($argv, '');
}
// Obtain number of requires hits
$hits = array(3,5,9,15,23);
if(in_array($argv[1],$hits))
{
    $hits = $argv[1];
}
else
{
    $hits = 3;
    log_action('Invalid hit number! Assuming 3...', ST_WARN);
}

// Obtain which site promote
$site = array(
    'http://testsite'.rand(3000,30000).'.ru',
    'http://nevkontakte.org.ru',
);

if(isset($site[$argv[2]]))
{
    $site = $site[$argv[2]];
}
else
{
    $site = $site[0];
    log_action("Invalid site id! Assuming $site ...", ST_WARN);
}

// Obtain which promoter use
$promos = array(
    'all',
    'asurf.net.ru',
    'rpanel.in',
    'surf.rpanel.info',
);

if(isset($promos[$argv[3]]))
{
    $promo = $promos[$argv[3]];
}
else
{
    $promo = $promos[1];
    log_action("Invalid promoter id! Assuming $promo ...", ST_WARN);
}

if($promo == 'all')
{
    log_action("Starting multipromo request queue for $hits hits to $site");
    for($i = 1; $i < sizeof($promos); $i++)
    {
        $promo = $promo = $promos[$i];
        log_action("Starting request for $hits hits to $site at $promo");

        $curl = &new Curl_HTTP_Client();

        //pretend to be IE6 on windows
        $useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
        $curl->set_user_agent($useragent);

        $cookies_file = "./cookies.txt";
        fclose(fopen($cookies_file, 'w'));
        $curl->store_cookies($cookies_file);
        //if you want to send some post data
        //form post data array like this one
        $post_data = array(
            'h'     => $hits,
            'url'   => $site,
        );
        //and send request to http://www.foo.com/login.php. Result page is stored in $html_data string
        $html_data = $curl->send_post_data("http://$promo/next.php", $post_data);
        if(preg_match('##', $html_data))
        {
            $html_data = $curl->fetch_url("http://$promo/save.php");
            if(preg_match('##', $html_data))
            {
                log_action('Succeed');
            }
            else
            {
                echo $html_data;
                $html_data = str_replace("\n",'',$html_data);
                log_action("Error at step 2! Responce: $html_data", ST_ERROR);
            }
        }
        else
        {
            echo $html_data;
            $html_data = str_replace("\n",'',$html_data);
            log_action("Error at step 1! Responce: $html_data", ST_ERROR);
        }
    }
}
else
{
    log_action("Starting request for $hits hits to $site at $promo");

    $curl = &new Curl_HTTP_Client();

    //pretend to be IE6 on windows
    $useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
    $curl->set_user_agent($useragent);

    $cookies_file = "./cookies.txt";
    fclose(fopen($cookies_file, 'w'));
    $curl->store_cookies($cookies_file);
    //if you want to send some post data
    //form post data array like this one
    $post_data = array(
        'h'     => $hits,
        'url'   => $site,
    );
    //and send request to http://www.foo.com/login.php. Result page is stored in $html_data string
    $html_data = $curl->send_post_data("http://$promo/next.php", $post_data);
    if(preg_match('##', $html_data))
    {
        $html_data = $curl->fetch_url("http://$promo/save.php");
        if(preg_match('##', $html_data))
        {
            log_action('Succeed');
        }
        else
        {
            echo $html_data;
            $html_data = str_replace("\n",'',$html_data);
            log_action("Error at step 2! Responce: $html_data", ST_ERROR);
        }
    }
    else
    {
        echo $html_data;
        $html_data = str_replace("\n",'',$html_data);
        log_action("Error at step 1! Responce: $html_data", ST_ERROR);
    }
}

log_action();

function log_action($log = '', $status = ST_INFO, $display = true)
{
    static $aid;
    static $string = array();

    if(empty($log))
    {
        $out = implode('',$string);
        $fp = fopen(date('y-m-d').'.txt','a');
        fwrite($fp, $out);
        fclose($fp);
        return;
    }

    if(empty($aid))
    {
        $aid=number_format(microtime(true),5,'','');
    }
    $date = date('y-m-d H:M');
    $string[] = "$aid [$date] $status: $log\n";

    if($display)
        echo "$aid [$date] $status: $log\n";

}
?>

Read more →

FF3: На старт... Внимание...

The Official Download Day Time | Spread Firefox Сегодня в 10:00 PDT (Pacific Daylight Time) будет обубликован для скачивания релиз FF3. В Москве в это время будет 21:00, а у меня в Новосибирске - полночь :) Время, конечно, не самое удачное, но что поделаешь :)