Долго думал, выкладывать этот скрипт или нет. У скрипта как бы двоякое может быть назначение. Все же решил выложить в урезанном виде. При определении ГС я исхожу из того, что большинство таких сателлитов построены на одних и тех же движках. И одним из них является Satellite-x. Как найти сайты на этом движке, я говорить не буду(у каждого должны быть свои методы). Говорить я буду о том, как отличить более-менее качественный сателлит от откровенного ГС.
По умолчанию у рассматриваемой CMS нет защиты от спама комментариев. И если вебмастер хоть как то озабочен своим сайтом, он в первую очередь защитит комментарии от спама. Тем более их можно в различных вариациях защищать прямо из админки CMS.
Таким образом, задача проверки сводится к тому, сможет ли мой скрипт оставить комментарий на этом сайте. Если сможет, значит на 90% это откровенный ГС и его смело можно отправлять в ГБЛ, поскольку покупать ссылки на таком сайте – самоубийство.
Разведка боем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | <?php $segodnya=date('d');; //Сегодняшнее число $msurls=file('satx/in.txt'); //Массив из урлов как его собирать, каждый решает сам $msnames=file("satx/nametest.txt"); //Массив имен в нете полно таких списков $mstexts=file("satx/texttest.txt"); //массив ответов. Придумываем флуд-фразы $provername=$msnames[array_rand($msnames)]; //Выбираем случайное имя $proverurl='yandex.ru'; //Куда будет вести ссылка с проверяемой страницы $provertext=$mstexts[array_rand($mstexts)]; //Выбираем случайный флуд-текст foreach ($msurls as $url) { //Перебор массива с урлами $url=trim($url); //Удаляем мусор //Подключаемся: $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); //Куки раз curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); //Куки два $html = curl_exec($ch); $pattern="|name=\"f_art\"[[:space:]]*value=\"(.*)\">|"; //регулярка раз $pattern2="|name=\"action\"[[:space:]]*value=\"(.*)\">|"; //регулярка два preg_match_all($pattern, $html, $out_urls); //Ищем на странице $pattern preg_match_all($pattern2, $html, $out_urls2); //и $pattern2 $dom=explode("/", $url); //Нам понадобится имя домена $postdata = array( //массив POST запросов 'method' => 'post', 'f_name' => $provername, 'f_url' => $proverurl, 'f_text' => $provertext, 'f_spam' => $segodnya, 'action' => $out_urls2[1][0], 'f_art' => $out_urls[1][0], ); curl_setopt($ch, CURLOPT_POST,1); //Будем отправлять POST запрос curl_setopt($ch, CURLOPT_POSTFIELDS,$postdata); //Отправляем POST запрос $html = curl_exec($ch); curl_close($ch); //А теперь проверяем что у нас получилось $pattern3="#<a href=\"http://".$proverurl."\">".$provername."</a>[[:space:]]*комментирует:#"; //регулярка раз $pattern4="#<a href=\"http://".$proverurl."\"[[:space:]]*rel=\"nofollow\">".$provername."</a>[[:space:]]*комментирует:#"; //регулярка два //Если есть хоть одно совпадение: if(preg_match_all($pattern3, $html, $out_urls3) || preg_match_all($pattern4, $html, $out_urls4)) { $fh = fopen('satx/bad.txt', 'a+'); //Файл с успешной отправкой fwrite($fh, $dom[2]."\n"); //Пишем имя домена в файл fclose($fh); //Закрываем файл echo $dom[2]." - <i>Bad</i><br>"; //Сообщаем об успешной отправке POST запроса flush(); } else //Если совпадений не найдено(на сайте есть антиспам или закрыты коментарии): { $fh = fopen('satx/good.txt', 'a+'); //Файл с неудачной отправкой fwrite($fh, $dom[2]."\n"); //Пишем имя домена в файл fclose($fh); //Закрываем файл echo $dom[2]." - <b>ОК</b><br>"; //Сообщаем о неудачной отправке POST запроса flush(); }//end if } // end foreach echo "<br>ВСЕ!"; //Сообщаем о завершении работы скрипта. ?> |
Надеюсь на благоразумное использование скрипта.