Портал Russian SEO

Авторизация

Кто онлайн

Сейчас на сайте:
Гостей - 2

Статистика

Участников: 489
Опубликованных материалов: 136
Ссылок: 19
Посетителей: 452089
RSS подписчиков за вчера: 272

Подписаться на RSS

HomeContact us
Новости arrow Новости arrow Курс молодого спамера-программиста. Глава 2
Курс молодого спамера-программиста. Глава 2 Версия в формате PDF Версия для печати Отправить на e-mail
Рейтинг: / 0
ХудшаяЛучшая 
Написал Lovec   

Глава 2.

Итак начнем разбор скрипта, приведенного в главе 1.
В этом скрипте собрано большинство механизмов, составляющих суть спамминга.

Начнем с азов. Чаще всего сервера конфигурируются таким образом, что фалы с расширением
*.PHP рассматриваются как исполняемые скрипты на языке PHP.
Заметьте - я сказал "чаще всего", а не "всегда". Дело в том,что сервер можно настроить
таким образом, чтобы любо удобное вам расширение служило признаком скрипта на PHP.
Причем это относится к любым видам расширений и серверных языков.
Но мы будем рассматривать классический случай.

Итак, просто дать файлу расширение PHP недостаточно для того, чтобы он начал выполнять какие-нибудь
нужные нам действия. Внутри файла должны быть размещены блоки кодов, которые , собственно,
и составляют суть программы.

Таких блоков кода может быть от 1 до практически бесконечности,в разумных пределах, конечно Smile
Такие участки кода заключаются между тегами <?php ?> .
Все что находится за пределами этихтегов будет просто выводиться клиенту как обычный
HTML.

<?php 

Открыли секцию кода на языке PHP

Error_Reporting(1+2+4);

Включили вывод всех ошибок и предупреждений.
Дело в том, что в целях безопасности, на многих хостах вывод этих сообщений по умолчанию отключен.
И это правильно, но это очень сильно затрудняет отладку и диагностику скриптов.
Соответственно я порекомендую всем на этапе разработки скрипта вставлять эту строку,
а по завершении написаниязакомментировать или вообще удалить.

$PostUrl="http://example.com/post.php";
$PostData="Text=text&User=user";
$OkString="";

Инициализация переменных.
В принципе в переменные можно заносить какие угодно данные, но лучше если значения хотябы
отдаленно будут схожи со значениями, которые будут в них заноситься на этапе выполнения.
Во первых это повысит читабельность скрипта, во-вторых облегчит процесс отладки.
$PostUrl - переменная содержит ПОЛНЫЙ URL к скрипту принимающему данные от скрипта
$PostData - массив данных пересылаемых удаленному скрипту
$OkString - переменная содержит строку, возвращаемую удаленным скриптом в случае удачного постинга.
К примеру некоторые гуестбуки любят писать "Thank you for posting" или чтото подобное. Тода мы присваиваем
этой переменной значение в виде этой строки и после постинга скрипт проверит наличие строки в
полученной странице. Если строка есть - постинг успешный, если нет - проблемы. Если эту переменную оставить
пустойто признаком успешности постинга служит нулевое состояние ошибки соединенияс сервером.

if (!empty($HTTP_GET_VARS))    extract($HTTP_GET_VARS);
if (!empty($HTTP_POST_VARS))   extract($HTTP_POST_VARS);

По документации PHP самдолжен создавать переменные с именем и значением взятыми из строки запроса
или из массива данных POST. На практике эе я достаточно часто встречал хосты, на которых
этого не происходило. Для решения этой проблемы и служат эти 2 строки.

$Url=substr($PostUrl,strpos($PostUrl,"//")+2);
$Url=substr($Url,0,strpos($Url,"/")); 

А вот с этого места уже начинается плезная работа скрипта. Здесь мы выделяем из полного
URL ту составляющую,которая адресует нужный нам скрипт в рамках сервера.

$HostName=substr($PostUrl,strpos($PostUrl,"//")+2);
$HostName=substr($HostName,strpos($HostName,"/")); 

Выделяем из полного URL имя сервера.

if(strpos($HostName,":"))
    {
    $HostPort=substr($HostName,strpos($HostName,":")+1);
    if(!is_numeric($HostPort))
        {
        $HostPort=80;
        }
    }
else
    {
    $HostPort=80;
    } 

Большиство www-серверов работают на 80 порту. Хотя бывают и исключения - именно для нихэтот участок кода.
Если в адресе сервера есть ":" то после него должна следовать цифра, указывающая порт на котором работает сервер.
Если этого нет, значит сервер на стандартном порту 80.

$fp=fsockopen($HostName, $HostPort, $errno, $errstr, 30); 

Устанавливаем соединение с сервером.
Адрес сервера в переменной $HostName, порт $HostPort.
Переменные $errno и $errstr предназначены для хранения сообщений об ошибках в
цифровом и текстовом виде соответственно.
30 - это значение таймаута, по истечении которого принимается решение что соединение установить невозможно.

if (!$fp)
    {
    echo "$errstr ($errno)<br />\n";
    } 

Если соединение прошло неуспешно, выводим сообщение об ошибке ставшей причиной проблемы.

else
    {
    $out  = "POST $Url HTTP/1.1\r\n";
    $out .= "Host: $HostName\r\n";
    $out .= "Content-type: application/x-www-form-urlencoded\r\n";
    $out .= "Connection: Close\r\n";
    $out .= "Content-length: ".strlen($PostData)."\r\n\r\n".$PostData; 

Если соединение прошло успешно, то формируем пакет запрса к серверу.

stream_set_timeout($fp, 30); 

Выставляем таймау на операции с сервером. Если в течение заданного отрезка времени не происходит никакого обмена данными,
то считаем чо соединение подвисло и обрываем его.

fputs($fp, $out); 

Передаем ранее сформированный пакт данных серверу.

if(strlen($OkString))
        {
        $Page="";
        while (!feof($fp))
            {
            $Page.=fgets($fp, 128);
            }

        if(strpos($Page,$OkString))
            echo "Ok";
        else
            echo "Error";
        }
    else
        {
        if($errno===0)
            echo "Ok";
        else
            echo "Error";
        } 

Если переменная $OkString не пустая то получаем ответ сервера в переменную $Page и проверяем
на наличие в ней сигнальной строки.
Если же в $OkString пусто то принаем решение об успешности или неуспешности на основе
значения переменной $errno.

fclose($fp);
    } 

Закрываем соединение с сервером, если оно до сих пор открыто.

?> 

Окончание блока кода


Вот разложенный по полочкам функционал скрипта из первой главы.

Автор: BiOM 

Источник и обсуждение статьи  


Просмотров: 1240

  Ваш комментарий будет первым
RSS комментарии

Добавить комментарий
Имя:
Домашняя страница
комментарий:



Код:* Code