Войти

Показать полную графическую версию : скрипт на PHP


Страниц : [1] 2

P O M A
16-12-2007, 16:11
Помогите написать скрипт!(сам в PHP почти никак)
Он должен 3 раза посылать запрос на ссылку, дожидаться загрузки страницы, 1 раз на вторую, потом опять на первую...Запросы скрипта должны выглядеть как у обычного браузера, выполняться на сервере

Coutty
16-12-2007, 17:08
Так помогите или напишите?)

1 раз на вторую, потом опять на первую... »
Чего?


<?php
// сначала составляем HTTP-запрос
$head = 'GET /script.php?parameter=nya HTTP/1.1
User-Agent: Opera/9.20 (Windows NT 5.1; U; ru)
Host: www.oszone.net
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://www.oszone.net /* а может и с двумя r пишется - referrer. Хз. */
Cookie: remixchk=2; /*в общем, тут куки перечислить, если надо*/
'; // конец запроса

$fp = fsockopen ("www.oszone.net", 80, $errno, $errstr, 30); // открываем сокет
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // если не открыл - плохо
} else { // если открыл
fputs ($fp, $head); // отправляем запрос
while (!feof($fp)) { // и получаем ответ
echo fgets ($fp,1280000);
}
fclose ($fp); // ответ получили, сокет закрываем.
}

// и продолжаем делать то, что надо.


GET-запрос (аналогично и с POST) можно словить через анализатор трафика (он же сниффер). Например, wireshark. И всё вписать в $head.

Arrest
16-12-2007, 18:52
Для случая P O M A, наверное, нужно так:
<?php
//Запрос к первой странице
$q1 = "GET /page1 HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: www.ru\r\n\r\n";

for($i=0; $i<3; $i++){
$fp = fsockopen ("http://www.ru", 80, $errno, $errstr, 30); // открываем сокет
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // если не открыл - плохо
} else { // если открыл
fputs ($fp, $q1); // отправляем запрос
while (!feof($fp)) { // и получаем ответ
echo fgets ($fp,1280000);
}
fclose ($fp); // ответ получили, сокет закрываем.
unset($fp);
}

$q2 = "GET /page2 HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: www.ru\r\n\r\n";

$fp = fsockopen ("http://www.ru", 80, $errno, $errstr, 30); // открываем сокет
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // если не открыл - плохо
} else { // если открыл
fputs ($fp, $q2); // отправляем запрос
while (!feof($fp)) { // и получаем ответ
echo fgets ($fp,1280000);
}
fclose ($fp); // ответ получили, сокет закрываем.
}

$fp = fsockopen ("http://www.ru", 80, $errno, $errstr, 30); // открываем сокет
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else { // если открыл
fputs ($fp, $q1); // отправляем запрос
while (!feof($fp)) { // и получаем ответ
echo fgets ($fp,1280000);
}
fclose ($fp);
unset($fp);
Скрипт переделан из Coutty'евского :)

P O M A
16-12-2007, 18:53
ну это типа накрутчика

Arrest
16-12-2007, 19:03
счетчики надо накручивать по другому. надо запрашивать их картинку, а не всю страницу.

Coutty
16-12-2007, 19:09
Накрутка будет обнаружена, если запрашивать с одного IP-адреса.

P O M A
16-12-2007, 19:31
не, это не накрутчик счётчиков и по IP не вычислят.Arrest, этот скрипт такой, какой мне надо? И как я понял, вместо http://ww.ru нухно писать свой URL? Как эту накрутку можно будет остановить?

P O M A
16-12-2007, 20:17
а вот ещё вопросы: после host нужно писать сайт, где лежит скрипт или сайт-жертву? В 3ем открытии сокета какую ссылку нужно писать(page1,page или чтото другое)?

Coutty
16-12-2007, 21:09
ак эту накрутку можно будет остановить? »
Скрипт сам остановится через max_execution_time, установленное в httpd.conf. Обычно это 30 секунд.
Даже если он не успеет сделать ни одного запроса))
Но тут только 5 запросов в скрипте. Если нужен цикл - нужно его ещё сделать.
Вообще, должен быть ещё спецплагин к php, позволяющий работать с сокетами. Проверь, будет ли вообще работать.
после host нужно писать сайт, где лежит скрипт или сайт-жертву? »
Туда будет отправляться запрос. Вообще, я не совсем понимаю, зачем это писать, если всё равно на тот сайт отправляешь.вместо http://ww.ru нухно писать свой URL »
Вместо него надо писать адрес, на который отправляешь запрос.

Arrest
16-12-2007, 23:19
Coutty, ачем это писать, если всё равно на тот сайт отправляешь. »
RFC 2616, секция 14.23 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23):
A client MUST include a Host header field in all HTTP/1.1 request messages.
...
All Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request) status code to any HTTP/1.1 request message which lacks a Host header field.
То бишь с HTTP 1.1 заголовок Host необходим, и на запросы без него сервак будет матюгаться 400-ой ошибкой.
P O M A
Ага. Это тот скрипт.
Да. Надо менять.

P O M A
19-12-2007, 17:58
а если такой скрипт:
1. GET к page1
2.GET к PAGE1
3.GET к PAGE1
(или page1 циклом)
4.GET к Page2
5. Перезагрузка скрипта?
А на каком хостинге можно будет разместить этот скрипт? А то разместил на народе, браузеры его просто открывают

Coutty
19-12-2007, 20:46
P O M A, ищи хостинг с поддержкой php. Например, holm.ru.
Может быть ещё ucoz.ru. Только я не знаю - можно ли там свои скрипты выкладывать.

5. Перезагрузка скрипта? »
Можно попробовать в этом пункте сделать вызов самого скрипта и убить текущее выполнение.
Что-то вроде "GET script.php"; exit();
Т.е. он вызовет выполнение себя ещё раз, а отработанный завершится.
Или, если время исполнения где-нибудь будет не ограничено, то всё в цикл поместить.

P O M A
20-12-2007, 18:15
а так будет работать <?php
//Запрос к первой странице
$q1 = "GET /page1 HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: www.адрес_сайта.ru\r\n\r\n";

for($i=0; $i<3; $i++){
$fp = fsockopen ("http://www.ссылка1.ru", 80, $errno, $errstr, 30); // открываем сокет
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // если не открыл - плохо
} else { // если открыл
fputs ($fp, $q1); // отправляем запрос
while (!feof($fp)) { // и получаем ответ
echo fgets ($fp,1280000);
}
fclose ($fp); // ответ получили, сокет закрываем.
unset($fp);
}

$q2 = "GET /page2 HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: www.адрес_сайта.ru\r\n\r\n";

$fp = fsockopen ("http://www.ссылка2.ru", 80, $errno, $errstr, 30); // открываем сокет
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // если не открыл - плохо
} else { // если открыл
fputs ($fp, $q2); // отправляем запрос
while (!feof($fp)) { // и получаем ответ
echo fgets ($fp,1280000);
}
fclose ($fp); // ответ получили, сокет закрываем.
}

$q1 = "GET /page3 HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: www.адрес_сайта.ru\r\n\r\n";

for($i=0; $i<3; $i++){
$fp = fsockopen ("http://www.ссылка3.ru", 80, $errno, $errstr, 30); // открываем сокет
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // если не открыл - плохо
} else { // если открыл
fputs ($fp, $q1); // отправляем запрос
while (!feof($fp)) { // и получаем ответ
echo fgets ($fp,1280000);
}
fclose ($fp); // ответ получили, сокет закрываем.
unset($fp);
}

$q2 = "GET /page4 HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: www.адрес_сайта.ru\r\n\r\n";

$fp = fsockopen ("http://www.ссылка4.ru", 80, $errno, $errstr, 30); // открываем сокет
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // если не открыл - плохо
} else { // если открыл
fputs ($fp, $q2); // отправляем запрос
while (!feof($fp)) { // и получаем ответ
echo fgets ($fp,1280000);
}
fclose ($fp); // ответ получили, сокет закрываем.
}
"GET script.php"; exit();

Coutty
20-12-2007, 22:32
Нет, конечно))
"GET script.php"; exit(); - я имел в виду так (в конце):
$q2 = "GET script.php HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: www.свой_сайт.ru\r\n\r\n";

$fp = fsockopen ("http://www.свой_сайт.ru", 80, $errno, $errstr, 30); // открываем сокет
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // если не открыл - плохо
} else { // если открыл
fputs ($fp, $q2); // отправляем запрос
while (!feof($fp)) { // и получаем ответ
echo fgets ($fp,1280000);
}
fclose ($fp); // ответ получили, сокет закрываем.
}
exit();

P O M A
21-12-2007, 15:36
хорошо, вот только я не понял - после GET нужно писать полную сыылку(http://sayt.ru/...\...\) или как? А при открытии сокета - только сам сайт?

Coutty
21-12-2007, 18:02
После GET надо писать имя скрипта с GET-параметрами (которые после вопроса стоят). При открытии сокета - имя хоста.

Arrest
22-12-2007, 18:02
черт, хорошая идея делать GET до конца выполнения скрипта, надо взять на вооружение :)

P O M A
03-01-2008, 10:46
вот кое-что поделал:
<?php

$q1 = "GET /...../скрипт.пхп HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: сайт1.ру\r\n\r\n";

for($i=0; $i<3; $i++){
$fp = fsockopen ("http://сайт1.ру", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, $q1);
while (!feof($fp)) {
echo fgets ($fp,1280000);
}
fclose ($fp);
unset($fp);
}

$q2 = "GET /...../скрипт.пхп HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: сайт1.ру\r\n\r\n";

$fp = fsockopen ("http://сайт1.ру", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, $q2);
while (!feof($fp)) {
echo fgets ($fp,1280000);
}
fclose ($fp);
}

$q3 = "GET /...../скрипт.пхп HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: сайт1.ру\r\n\r\n";

for($i=0; $i<3; $i++){
$fp = fsockopen ("http://сайт1.ру", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, $q1);
while (!feof($fp)) {
echo fgets ($fp,1280000);
}
fclose ($fp);
unset($fp);
}

$q4 = "GET /...../скрипт2.пхп HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: сайт1.ру\r\n\r\n";

$fp = fsockopen ("http://сайт1.ру.ru", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, $q2);
while (!feof($fp)) {
echo fgets ($fp,1280000);
}
fclose ($fp);
}

$q5 = "GET script.php HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Linux i686)\r\nHost: сайт2.ру\r\n\r\n";

$fp = fsockopen ("http://сайт2.ру", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, $q2);
while (!feof($fp)) {
echo fgets ($fp,1280000);
}
fclose ($fp);
}
exit();
сайт1.ру - "сайт-жертва"
/..../скрипт1.пхп - "скрипт-жертва"
сайт2.ру - сайт, где лежит мой скрипт
Script.php - мой скрипт
Так работать будет?

vadimiron
03-01-2008, 11:35
Так работать будет? »
Вот я удивляюсь - а почему бы просто не протестировать. Так Вы сами поймёте работает или нет, а если нет - то сразу увидите ошибки...

P O M A
04-01-2008, 18:14
Что обозначает вот это?:
Parse error: parse error, unexpected $ in /home/a/.../www/script.php on line 71
Всё ли правильно я сделал?




© OSzone.net 2001-2012