|
|
|
| здравствуйте у меня не получается авторизация с помошью сокетов. Вот код
$hostname = "win.mail.ru";
$path = "/cgi-bin/auth";
$line = "";
// Устанавливаем соединение, имя которого
// передано в параметре $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// Данные HTTP-запроса
// $data ="Login=login&Password=parol&Domain=mail.ru\r\n\r\n";
$data ="Login=login&Password=parol&Domain=mail.ru\r\n\r\n";
// Заголовок HTTP-запроса
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: close\r\n";
$headers .= "User-Agent: Opera/9.20 (Windows NT 6.0; U; en)\r\n";
// $headers .= "Accept: text/html,image/jpeg,image/gif,text/xml,text/plain,image/png,* /*;q=0.5\r\n";
// $headers .= "Accept-Language: en-us,en;q=0.5\r\n";
// $headers .= "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n";
// $headers .= "Referer: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
// Отправляем HTTP-запрос серверу
fwrite($fp, $headers.$data);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo "<pre>"; print_r($line); echo "</pre>";
|
Он мне выдаёт следующий ответ
HTTP/1.1 302 OK
Server: nginx/0.7.62
Date: Sun, 18 Apr 2010 12:37:38 GMT
Content-Type: text/html
Connection: close
Location: http://win.mail.ru/cgi-bin/login?fail=1
Set-Cookie: mrcu=5D954BCAFD127C48120D0100007F; expires=Wed, 15 Apr 2020 12:37:38 GMT; path=/; domain=.mail.ru
Cache-Control: no-cache,no-store,must-revalidate
Pragma: no-cache
Expires: Sat, 18 Apr 2009 12:37:38 GMT
Last-Modified: Sun, 18 Apr 2010 16:37:38 GMT
Content-Length: 52
X-Host: f222.mail.ru
|
| |
|
|
|
|
|
|
|
для: Max78
(18.04.2010 в 16:28)
| | Первое что нужно, это проверить не требуется ли установить Cookie... Скорее всего на этом вас и ловит сервер, что вы при каждом обращении новую сессию начинаете. | |
|
|
|
|
|
|
|
для: cheops
(18.04.2010 в 17:52)
| |
Location: http://win.mail.ru/cgi-bin/login?fail=1
Set-Cookie: mrcu=5D954BCAFD127C48120D0100007F; expires=Wed, 15 Apr 2020 12:37:38 GMT; path=/; domain=.mail.ru
|
из полученного ответа я должен указать новый путь
и передать кукисы . я прав?
$hostname = "win.mail.ru";
$path = "/cgi-bin/login?fail=1";
$line = "";
// Передаём методом POST
// Устанавливаем соединение, имя которого
// передано в параметре $hostname
$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 .= "Cookie: mrcu=5D954BCAFD127C48120D0100007F; path=/; domain=.mail.ru\r\n"; // constant
$headers .= "Connection: Close\r\n\r\n";
// Отправляем HTTP-запрос серверу
fwrite($fp, $headers);
// fwrite($fp, $headers.$data);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
|
| |
|
|
|
|
|
|
|
для: Max78
(18.04.2010 в 18:33)
| | Боюсь, значение mrcu будет каждый раз разным, вероятно сначала нужно дернуть страницу авторизации, получить значение HTTP-заголовка Set-Cookie, и потом устанавливать его в следующем запросе. | |
|
|
|
|
|
|
|
для: cheops
(19.04.2010 в 13:21)
| | Здравствуйте а как с помошью регулярных выражений вырезать значение куки mrcu
Set-Cookie: mrcu=DD304BCD309B0B4897428CD07355; expires=Fri, 17 Apr 2020 04:42:03 GMT; path=/; domain=.mail.ru
|
и правильно ли я . Потом подделываю куки
$headers .= "Set-Cookie: mrcu=DD304BCD309B0B4897428CD07355; expires=Fri, 17 Apr 2020 04:42:03 GMT; path=/; domain=.mail.ru\r\n";
|
уже 3 день подряд сижу ничего не получается.
Свои скрипты на локалхосте получается за 1 минуту, а этот майл ру ну ни как не получается.
Сперва как вы и советовали начал всё с начала
www.mail.ru потом исходя из полученного ответа
$hostname = "win.mail.ru";
$path = "/cgi-bin/auth";
| затем
$hostname = "win.mail.ru";
$path = "/cgi-bin/start";
| затем
$hostname = "win.mail.ru";
$path = "/cgi-bin/login";
|
| |
|
|
|
|
|
|
|
для: Max78
(20.04.2010 в 09:05)
| | Нет, вы должны отправить следующий заголовок (Set-Cookie - это только для клиента)
$headers .= "Cookie: mrcu=DD304BCD309B0B4897428CD07355;\r\n"
|
Для извлечения значения можно использовать регулярное выражение вида
| |
|
|
|
|
|
|
|
для: cheops
(20.04.2010 в 12:31)
| | Правильно ли я сделал. Сперва открыл главную страницу майл.ру. Затем считал куки и отправил их . затем он дважды менял локейшн. Я их указывал в пути. Но ничего не получилось. где у меня ошибки в коде. (поподробнее) Попробуйте сами б у вас должно за 5 минут получиться. я уже 5 день не могу сделать.
<?php
$hostname = "www.mail.ru";
$path = "/";
$line = "";
$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";
// Отправляем HTTP-запрос серверу
fwrite($fp, $headers);
// fwrite($fp, $headers.$data);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo "<pre>"; print_r($line); echo "</pre>";
// step 2
if( preg_match_all('#^Set-Cookie:\\s*([^=]+)=([^;\\s]+)#m', $line, $matches) )
{
$cookie_header = 'Cookie: ';
for($i = 0; $i < count($matches[0]); $i++)
$cookie_header .= ($i ? '; ' : '') . $matches[1][$i] . '=' . $matches[2][$i];
$out .= $cookie_header . "\r\n";
}
echo $out;
$hostname = "win.mail.ru";
$path = "/cgi-bin/auth";
$login="login"; $pass="pass"; $domain="mail.ru";
$line = "";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// Данные POST-запроса
$data = "login=" . urlencode($login) . "&password=" . urlencode($$pass) . "&domain=" . urlencode($domain) . "&\r\n\r\n";
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= $out."\r\n"; // constant
$headers .= "Connection: Close\r\n\r\n";
// Отправляем HTTP-запрос серверу
//fwrite($fp, $headers);
fwrite($fp, $headers.$data);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo "<pre>"; print_r($line); echo "</pre>";
// step 3
$path = "/cgi-bin/start";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// Данные POST-запроса
$data = "login=" . urlencode($login) . "&password=" . urlencode($$pass) . "&domain=" . urlencode($domain) . "&\r\n\r\n";
// Формируем HTTP-заголовки для передачи
// его серверу
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= $out."\r\n"; // constant
$headers .= "Connection: Close\r\n\r\n";
// Отправляем HTTP-запрос серверу
//fwrite($fp, $headers);
fwrite($fp, $headers.$data);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo "<pre>"; print_r($line); echo "</pre>";
/// step 4
$path = "/cgi-bin/login";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// Данные POST-запроса
$data = "login=" . urlencode($login) . "&password=" . urlencode($$pass) . "&domain=" . urlencode($domain) . "&\r\n\r\n";
// Формируем HTTP-заголовки для передачи
// его серверу
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= $out."\r\n"; // constant
$headers .= "Connection: Close\r\n\r\n";
// Отправляем HTTP-запрос серверу
//fwrite($fp, $headers);
fwrite($fp, $headers.$data);
// Получаем ответ
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo "<pre>"; print_r($line); echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: Max78
(20.04.2010 в 15:07)
| | Ловушек там может быть множество - вы, например, не отправляете USER-AGENT - скорее всего mail.ru видит, что к нему обращается какой-то скрипт PHP-5.2 и естественная реакция - отказать в доступе. Помимо USER-AGENT скрипт может ожидать реферер (это, конечно, вряд ли - слишком ненадежно и могут быть отказы у пользователей фаерволов, но всякое может быть).
То что я быстрее разберусь в ситуации - совершенно не факт. Собственную авторизацию я бы прошел очень быстро - авторизацию mail.ru, которая вероятно при малейшем подозрении ещё и графический код выставит - далеко не факт. | |
|
|
|
|
|
|
|
для: cheops
(20.04.2010 в 16:27)
| | Не знаю, делал ли так автор скрипта, но увеличить вероятность того, что скрипт примут за пользователя можно, если просмотреть досконально все отправляемые браузером заголовку к мэилу, все приходящие заголовки - для этого существует множество инструментов. А рандомно лепить.. | |
|
|
|
|
|
|
|
для: neadekvat
(20.04.2010 в 18:11)
| | Лишним не будет, возможно на странице авторизации не одна cookie устанавливается - возможно сервер ждет вторую cookie. | |
|
|
|
|
|
|
|
для: neadekvat
(20.04.2010 в 18:11)
| | а как узнать досконально все отправляемые и принимаемые браузером заголовки? это куда надо смотреть? | |
|
|
|
|
|
|
|
для: Max78
(21.04.2010 в 12:42)
| | если не ошибаюсь, то была специальная прога заточенная именно под это
(года два назад читал про это) | |
|
|
|
|
|
|
|
для: Max78
(21.04.2010 в 12:42)
| | Нужно воспользоваться одним из сниферов, которые часто оформляют в виде плагина к браузеру. | |
|
|
|
|
|
|
|
для: cheops
(20.04.2010 в 16:27)
| |
<?php
$login="логин";
$domain="mail.ru";
$pass = "пароль";
$hostname = "win.mail.ru";
$path = "/cgi-bin/auth";
$fp = fsockopen($hostname,80);
if(!$fp){
echo"no!";
}
else{
$data = "Login=$login&Domain=$domain&Password=$pass&page=1&post=1&login_from=1\r\n\r\n"; // отправляемые даные!
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: close\r\n";
$headers .= "User-Agent: Opera/9.20 (Windows NT 6.0; U; en)\r\n";
$headers .= "Accept: text/html,image/jpeg,image/gif,text/xml,text/plain,image/png,* /*;q=0.5\r\n";
$headers .= "Accept-Language: en-us,en;q=0.5\r\n";
$headers .= "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n";
$headers .= "Referer: $hostname\r\n";
$headers .= "Content-Type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
fputs($fp,$headers.$data);
while(!feof($fp))
{
$line=fread($fp,1000);
echo "<pre>"; print_r($line); echo "</pre>";
}
}
fclose($fp);
?>
|
ответ
HTTP/1.1 302 OK
Server: nginx/0.7.62
Date: Wed, 21 Apr 2010 08:27:00 GMT
Content-Type: text/html
Connection: close
Set-Cookie: t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAMBAA AAAAAAAAAZAAoHugcA; expires=Mon, 18 Oct 2010 08:27:00 GMT; path=/; domain=.mail.ru
Set-Cookie: Mpop=1271838420:7960545a7b554c46190502190c1d00051c0 c074f6a5d5e465e07010000061e0a73751e 4d58595d5148000d1658505d5b174345:taalay78@mail.ru:; expires=Tue, 20 Jul 2010 08:27:00 GMT; path=/; domain=.mail.ru
Location: http://win.mail.ru/cgi-bin/checkcookie?id=7960545a7b554c46190502190c1d00051c0 c074f6a5d5e465e07010000061e0a73751e 4d58595d5148000d1658505d5b174345
Set-Cookie: mrcu=58B44BCEB6D44F4BFB600100007F; expires=Sat, 18 Apr 2020 08:27:00 GMT; path=/; domain=.mail.ru
Cache-Control: no-cache,no-store,must-revalidate
Pragma: no-cache
Expires: Tue, 21 Apr 2009 08:27:00 GMT
Last-Modified: Wed, 21 Apr 2010 12:27:00 GMT
Content-Length: 157
X-Host: f202.mail.ru
http://win.mail.ru/cgi-bin
кажется я где то рядом хожу, но ни как не могу. Помогите пожалуйста. | |
|
|
|
|
|
|
|
для: Max78
(21.04.2010 в 12:47)
| | Это не окончательный ответ.
Это такой же 302 / Location:
.сервер .ваш скрипт по этому пути может гонять 5 раз, а может (условно говоря) и 50 раз.
Если Вы пытаетесь эту цепь определить как статическую, то зря. | |
|
|
|
|
|
|
|
для: Trianon
(21.04.2010 в 13:00)
| | я в документах куки просмотрел C/document and settings/admin/cookie , там такие же значения прописаны . Хотя уже голова закружилась. уже 8 день с утра до вечера сижу. Весь гугл измотал. Есть авторизация на майл ру . Только она написана на перле. Кстати вам (сайту) пора книгу издать на счёт сокетов. Более подробно как для начинаюших так и для профессионалов. Кстати не могли бы вы подсказать хорошие российские или зарубежные форумы по пхп. уже проверенные чтоб время не терять, а то гугл слишком много выдаёт. | |
|
|
|
|
|
|
|
для: Max78
(20.04.2010 в 15:07)
| | вообще то по форуму если хорошо пошерстить, то можно найти готовый скрипт авторизации на майле. я лично видел его где-то, пробовал в работе, но за ненадобностью и удалил. | |
|
|
|