|
|
|
| Хочу отправить сообщение на форум, через сокеты.
Прикрепил пример формы, для отправки сообщения.
В теме http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1879 нашел пример, и чуть изменил.
<?php
$hostname = "www.site.net";
$path = "/folder/?messages&add";
$line = "";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp)
echo "$errstr ($errno)<br />\n";
else
{
$data = "touser=" . urlencode("name") . "&title=" . urlencode("title") . "&text=" . urlencode("text") . "&sendbutton=" . urlencode ("1") . "\r\n\r\n";
$headers = "POST $path http/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
fwrite($fp, $headers.$data);
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
|
Но при отправке, открывается страница с формой, а передача данных не происходит.
Что я упустил? | |
|
|
| |
|
|
|
|
для: cheops
(21.12.2005 в 14:05)
| | Попробовал отправить сессию, как вы показывали, но все-равно не получается.
<?php
$hostname = "www.site.net";
$path = "/folder/?messages&add";
// Устанавливаем соединение, имя которого
// передано в параметре $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// Формируем HTTP-заголовки для передачи
// его серверу
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: Close\r\n\r\n";
// Отправляем HTTP-запрос серверу
fwrite($fp, $headers);
// Получаем ответ
while (!feof($fp))
{
$line = fgets($fp, 1024);
// Ищем строку вида
// Set-Cookie: PHPSESSID=6197e647566bdaa24da3ab42ae7604b2;
// Именно она устанавливает cookie
preg_match("|Set-Cookie: PHPSESSID=([\d\w]+);|i",$line,$out);
if(!empty($out[1]))
{
$SID = $out[1];
break;
}
}
fclose($fp);
}
$hostname = "www.site.net";
$path = "/folder/?messages&add";
$line = "";
// Передаём методом POST имя пользователя (admin),
// его пароль (admin), скрытое поле session_id ($SID)
// В заголовках, передаём cookie PHPSESSID
// Устанавливаем соединение, имя которого
// передано в параметре $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// Данные POST-запроса
$data = "touser=name&title=title&text=text&sendbutton=1&session_id=$SID&\r\n\r\n";
// Формируем HTTP-заголовки для передачи
// его серверу
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n";
// Подделываем cookie
$headers .= "Cookie: PHPSESSID=$SID;\r\n";
$headers .= "Connection: Close\r\n\r\n";
// Отправляем HTTP-запрос серверу
fwrite($fp, $headers.$data);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
|
Сверху над формой, пишется
HTTP/1.1 302 Found Date: Wed, 21 Dec 2005 12:53:42 GMT Server: Apache/1.3.29 (Unix) PHP/5.0.4 mod_deflate/1.0.19 rus/PL30.19 X-Powered-By: PHP/5.0.4 Set-Cookie: PHPSESSID=0add3906dd00fb33260ab3d7438d6e10; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: userid=deleted; expires=Tue, 21 Dec 2004 12:53:41 GMT; path=/; domain=.site.net Set-Cookie: userid=deleted; expires=Tue, 21 Dec 2004 12:53:41 GMT; path=/ Set-Cookie: userid=deleted; expires=Tue, 21 Dec 2004 12:53:41 GMT; path=/; domain=.site.net Set-Cookie: userid=deleted; expires=Tue, 21 Dec 2004 12:53:41 GMT; path=/ Location: /folder/login.php Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=windows-1251 Vary: accept-charset, user-agent 1bdc
|
Я так понимаю, что нужно отправлять еще и куку userid. Но как ее узнать, если она не всегда одинакова? | |
|
|
|
|
|
|
|
для: Drago
(21.12.2005 в 16:03)
| | А какое время было в момент отправки запроса - тут куча временных меток... | |
|
|
|
|
|
|
|
для: cheops
(22.12.2005 в 03:04)
| | Не помню, какое было тогда.
Но отправил только что, выдало вот это.
HTTP/1.1 302 Found Date: Thu, 22 Dec 2005 00:29:51 GMT Server: Apache/1.3.29 (Unix) PHP/5.0.4 mod_deflate/1.0.19 rus/PL30.19 X-Powered-By: PHP/5.0.4 Set-Cookie: PHPSESSID=5a774e86e4ee6cabe1560ad0526d1f04; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: userid=deleted; expires=Wed, 22 Dec 2004 00:29:50 GMT; path=/; domain=.site.net Set-Cookie: userid=deleted; expires=Wed, 22 Dec 2004 00:29:50 GMT; path=/ Set-Cookie: userid=deleted; expires=Wed, 22 Dec 2004 00:29:50 GMT; path=/; domain=.site.net Set-Cookie: userid=deleted; expires=Wed, 22 Dec 2004 00:29:50 GMT; path=/ Location: /folder/login.php Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=windows-1251 Vary: accept-charset, user-agent 1bdc
|
| |
|
|
|
|
|
|
|
для: cheops
(22.12.2005 в 03:04)
| | А эти метку, могут сильно помешать? | |
|
|
|
|
|
|
|
для: Drago
(23.12.2005 в 01:21)
| | В принципе сказать наверняка нельзя... вообще они похоже на команды по уничтожению cookie... | |
|
|
|
|
|
|
|
для: cheops
(23.12.2005 в 14:26)
| | Отправил скрипту куки, что была установлена у меня. Получил вот это.
HTTP/1.1 200 OK Date: Fri, 23 Dec 2005 12:48:06 GMT Server: Apache/1.3.29 (Unix) PHP/5.0.4 mod_deflate/1.0.19 rus/PL30.19 X-Powered-By: PHP/5.0.4 Set-Cookie: PHPSESSID=c81314d43e14b6f2500b9844813107a2; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: userid=login+655c303fb229e27bb6bb38e2c2ac53e0_id_; expires=Sat, 24 Dec 2005 12:48:06 GMT; path=/; domain=.site.net Set-Cookie: userid=login+655c303fb229e27bb6bb38e2c2ac53e0_id_; expires=Sat, 24 Dec 2005 12:48:06 GMT; path=/ Set-Cookie: userid=login+655c303fb229e27bb6bb38e2c2ac53e0_id_; expires=Sat, 24 Dec 2005 12:48:06 GMT; path=/; domain=.site.net Set-Cookie: userid=login+655c303fb229e27bb6bb38e2c2ac53e0_id_; expires=Sat, 24 Dec 2005 12:48:06 GMT; path=/ Transfer-Encoding: chunked Content-Type: text/html; charset=windows-1251 Vary: accept-charset, user-agent 1c0d
|
Скрипт меня узнал, как будто я нормально зашел, но сообщение, все-равно не отправляет.
Я уже начинаю сомневаться, возможно ли это вообще? Или там сильно хитрая защита? | |
|
|
|
|
|
|
|
для: Drago
(23.12.2005 в 15:54)
| | Я ему уже и реферер отправлял, а он все-равно не работает.
<?php
$hostname = "www.site.net";
$path = "/folder/?messages&add";
$line = "";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp)
echo "$errstr ($errno)<br />\n";
else
{
$data = "touser=name&title=title&text=text&sendbutton=1 \r\n\r\n";
$headers = "POST $path http/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Cookie: userid=login+655c303fb229e27bb6bb38e2c2ac53e0_id_;\r\n";
$headers .= "Referer: http://www.site.net/folder/?messages&add\r\n";
$headers .= "User-Agent: Opera/8.01 (Windows NT 5.1; U; ru)\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
fwrite($fp, $headers.$data);
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
|
| |
|
|
|
|
|
|
|
для: Drago
(25.12.2005 в 00:18)
| | Вы не отправляете PHPSESSID и используете постоянный SID в userid - 655c303fb229e27bb6bb38e2c2ac53e0. Так не пойдёт, необходимо предварительно выяснять SID, который вам назначает сервер, как это описывается в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=9050 | |
|
|
|
|
|
|
|
для: cheops
(25.12.2005 в 13:42)
| | Пробовал вот так, в результате куки не распазнаются.
<?php
$hostname = "www.site.net";
$path = "/folder/?messages&add";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp)
echo "$errstr ($errno)<br />\n";
else
{
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: Close\r\n\r\n";
fwrite($fp, $headers);
while (!feof($fp))
{
$line = fgets($fp, 1024);
preg_match("|Set-Cookie: PHPSESSID=([\d\w]+);|i",$line,$out);
if(!empty($out[1]))
{
$SID = $out[1];
$f = fopen ("file", "w");
fwrite ($f, $SID);
fclose ($f);
break;
}
}
fclose($fp);
}
$hostname = "www.site.net";
$path = "/folder/?messages&add";
$line = "";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
$data = "touser=name&title=title&text=text&sendbutton=1&\r\n\r\n";
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n";
$headers .= "Cookie: PHPSESSID=$SID;\r\n";
$headers .= "Cookie: heroesuserid=login+".$SID."_id_;\r\n";
$headers .= "Referer: http://www.site.net/folder/?messages&add\r\n";
$headers .= "User-Agent: Opera/8.01 (Windows NT 5.1; U; ru)\r\n";
$headers .= "Connection: Close\r\n\r\n";
fwrite($fp, $headers.$data);
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
|
Выдает вот это
HTTP/1.1 302 Found Date: Sun, 25 Dec 2005 10:57:12 GMT Server: Apache/1.3.29 (Unix) PHP/5.0.4 mod_deflate/1.0.19 rus/PL30.19 X-Powered-By: PHP/5.0.4 Set-Cookie: PHPSESSID=60e27394a33da26385f5c7fea39cf4f5; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: userid=deleted; expires=Sat, 25 Dec 2004 10:57:11 GMT; path=/; domain=.site.net Set-Cookie: userid=deleted; expires=Sat, 25 Dec 2004 10:57:11 GMT; path=/ Set-Cookie: userid=deleted; expires=Sat, 25 Dec 2004 10:57:11 GMT; path=/; domain=.site.net Set-Cookie: userid=deleted; expires=Sat, 25 Dec 2004 10:57:11 GMT; path=/ Location: /folder/login.php Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=windows-1251 Vary: accept-charset, user-agent 1bdc
|
И помоему, в userid записывается не SID, а хэш пароля. Так как при повторном логине, он не меняется. | |
|
|
|
|
|
|
|
для: Drago
(25.12.2005 в 14:00)
| | Вы уж извените за мою настырность, но кто-нибудь может мне помочь с этой проблемой? | |
|
|
|
|
|
|
|
для: Drago
(26.12.2005 в 23:01)
| | Достаточно сложно решить проблему, особенно если владельцы источника против такого использования и выстраивают защиту (так как точно узнать, что они используют для защиты невозможно), кроме того не очень хорошо с моральной точки зрения. | |
|
|
|
|
|
|
|
для: cheops
(27.12.2005 в 13:27)
| | Спасибо. Так бы сразу и сказали. :)
Раз это сделать сложно, то делать это дальше, не вижу смысла, так как "Овчинка, выделки не стоит". :) | |
|
|
|
|