Быстрая рефспамилка

Тема в разделе "PHP", создана пользователем phillip, 12 апр 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    Тут
    http://www.rxpblog.com/refspam-theory-practice/
    есть рефспамилка на перле, и на пхп. Я немного пообточил ее под себя. Тестю. У меня получилось 20к урлов проспамилось за ночь. Пхп скриптом.
    Для примера хрумер спамит 100-150к урлов за час.
    Возможно ли на пхп, или на перле, или хз на чем сделать рефспамилку с такой скоростью?

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

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46
    30-40 запросов в секунду. конечно же реально, но только через мультипоточность. Запускать 10-50 скриптов или через multi_curl. Тут возникает проблема очередей, но это решаемо.

    20к за ночь - это очень мало. некоторые сайты очень долго могут отдавать ответ, а ваш скрипт в это время тихо курит в сторонке.

    А в чём собственно вопрос?
     
    phillip нравится это.
  3. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Да не парься с мультикурлом, подели базу на равные части да запусти просто 40-50 копий скрипта (для перла это вообще влегкую, php чуть побольше ресурсов жрет, но тоже вполне потянет) - и пусть они каждый в single-mode себе и работают. Вот на сколько памяти хватит - столько и запусти.

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

    И еще, в этом методе спама самая большая нагрузка - на DNS, а вовсе не на канал. Заюзай быстрый DNS - и скорость пробива значительно увеличится.
     
    phillip нравится это.
  4. win32

    win32

    Заблокирован
    Регистр.:
    17 июн 2008
    Сообщения:
    328
    Симпатии:
    192
    1. Пробовал ли ты десктопную версию Ref-o-Rama ?
    2. Поделить плиз для php скрипта своим файликом refbase.txt
    3. php-скрипт через cron работает ?
     
  5. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    1 пробовал, что-то отказалась работать у меня
    2 взял базу выложенную там же для перловой версии скрипта
    3 не, не по крону, яваскриптом запускается как только 20 урлов проспамлено
     
    win32 нравится это.
  6. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    А как на виндовой машине запустить одновременно кучу копий перлового скрипта :nezn:
    Там в статье пишут что заходим в cmd и пишем
    Делаю я так кстати- дак он вообще медленно! Медленнее даже чем мой скрипт на пхп! :D А свой скрипт запускаю- и начинается медленное притормаживание всей системы. потом больше, больше и в итоге через 15мин даже перемещение курсора по экрану тормозит. Тоже не могу понять отчего это так. Кстати может дело в фаерволе?
     
  7. Abliganto

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46
    Это при скольких копиях скрипта у вас такие жёсткие тормоза? Могу посоветовать не запускать скрипт в окружении веб-сервера (если вы вдруг его так запускаете), т.к. он хавает очень много памяти. Обычный консольный интерпретатор PHP и минимум кода - залог к производительности.

    Если используется БД или мемори кеш и надо распраллелить из таблицы строки, советую использовать след. подход:
    Код:
    $nomerTekushegoPotoka = от 0 до $kolvoPotokov - 1
    
    SELECT * FROM table WHERE crc32( id ) % $kolvoPotokov = $nomerTekushegoPotoka AND `checked` = 'N'
    
    только надо сразу определиться сколько потоков вы хотите :)

    Но тут лучше использовать очередь в каком-нить мемори-кешере (apc, redis, memcache)

    Если часто спамите по одной базе, то и кеш IP для хостов (ДНС) пригодился бы ;)

    Пхп конечно не сравним с СИ, но он может работать быстро!
     
    phillip нравится это.
  8. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Вполне кстати сравним, особенно для данной задачи. Затыки-то все равно все в стеке tcp/ip, а оставшиеся 0.005% времени выполнения скрипта - ну и что, что на СИ они будут в сотни раз быстрее выполняться? Да и не будут в сотни :)

    Насчет очереди - вот вариант для переменного количества потоков:

    PHP:
    $query "SELECT id,url FROM queue WHERE status='free' LIMIT 1 FOR UPDATE";
    list(
    $id$url) = mysql_fetch_array(mysql_query($query));
    if (
    $id) {
      
    $query "UPDATE queue SET status='taken' WHERE id='$id'";
      
    mysql_query($query);

    // spam to $url

      
    if ($result$query "UPDATE queue SET status='done' WHERE id='$id'";
      else 
    $query "UPDATE queue SET status='error' WHERE id='$id'";
      
    mysql_query($query);
    }
    Заводим общую очередь, из которой каждый скрипт берет по 1-й свободной записи и тут же помечает ее как занятую. FOR UPDATE гарантирует, что другой скрипт параллельно не вытянет эту же запись из таблицы. status типа ENUM('free','taken','done','error'). Ну или просто TINYINT.

    Скрипов можно динамически добавлять-удалять, плюс в очередь можно добавлять "по ходу" новые записи. Все проверено в боевых условиях, только у меня оно еще параллелится на несколько IP-адресов (одна общая очередь).
     
    phillip нравится это.
  9. Abliganto

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46
    И вы забыли добавить, что всё это хозяйство работает только если тип таблицы InnoDb т.к. используются транзакции, найдутся ведь умельцы и на MyIsam такое сделают, а работать не будет.

    На досуге тоже попробую проспамить, посмотрим чем лучше пойдёт, хрумаком или через свою очередь :) Отпишу о результатах.
     
  10. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Конечно хрумаком, тут и думать нечего. )

    У хрумака неблокирующие сокеты, php со своим курлом нервно отдыхает.

    Но повторюсь, самое главное в рефспаме - это быстрый DNS. И как ты правильно заметил, кешировать бы его очень было бы здорово, благо памяти на это все потребуется мегов двадцать, при миллионной базе. Можно целиком в памяти держать и бинарным поиском находить.

    А открыть сокет и послать HEAD - много ресурсов не надо. Т.е. в теории рефспам может валить значительно мощнее, чем хрум с его полноценными сабмитами. Жалко вот толку от него очень мало..
     
Статус темы:
Закрыта.