Отправляю POST запрос на сервер. Он мне пытается вставить куки: Set-Cookie:блаблабла1 Set-Cookie:блаблабла2 Set-Cookie:блаблабла3 Каким образом при помощи пхп перехватить эти куки , чтобы потом их юзать при следующем запросе? Сорри, если вопрос ламерский - я в пхп нуб пока. Спасибо!
Короче, попытаюсь написать поподробнее... При помощи Inetcrack отправляю: Code: POST http://site.com/login HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Referer: http://site.com Accept-Language: ru Content-Type: application/x-www-form-urlencoded Proxy-Connection: Keep-Alive User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host: site.com Content-Length: 47 Pragma: no-cache Cookie: PHPSESSID=2f83a67a61ef83594528c117c25a7da3 username=usver&password=123456&processlogin=1 Получаю ответ: Code: HTTP/1.0 302 Found Date: Tue, 17 Apr 2007 18:23:23 GMT Server: Apache X-Powered-By: PHP/5.2.0-8 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: private Pragma: no-cache Set-Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; path=/; domain=.site.com Set-Cookie: loginname=usver; path=/; domain=.site.com Set-Cookie: id_hash=bca49e192dce15ec725dce475e59d1a0; path=/; domain=.site.com location: http://site.com/authloggedin Content-Length: 0 nnCoection: close Content-Type: text/html; charset=UTF-8 RemovedHdr: Keep-Alive И потом снова отправляю: Code: GET http://site.com/ HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Referer: http://site.com/login Accept-Language: ru Proxy-Connection: Keep-Alive User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host: site.com Pragma: no-cache Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; loginname=usver; id_hash=bca49e192dce15ec725dce475e59d1a0 И все... Как реализовать все это на пхп? Если можно - приведите код.. Битый час пытаюсь написать этот скрипт, но нифига не фурычит... По-моему, я где-то туплю..
открываеш сокет, отправляеш http заголовок, потом читаеш ответ,в нем будут твои куки! Ты их просто выдираеш оттуда и юзаеш!
сохраняешшь состояние сокета в переменую, потом парсишь эту переменую например с помощью регулярки(регулярного выражения) Cookie: PHPSESSID=2f83a67a61ef83594528c117c25a7da3 потом вставляешь в переменую и опять отсылаещь. Как я понял ты хочешь че то брутануть, зделай все в цикле, условием остановки которого будет удачный ответ.
2beerbear вот примерный вариант шаблона, который тебе нужен. Если че-то не понятно, тогда помочь могут только маны пХп (работа с сокетами, http протокол, ессии, ну и парсинг строковыми функциями) PHP: <? //соединяемся с сервером $fp = fsockopen($hostname, 80, $errno, $errstr, 30); if(!$fp) { //проверяем успешность соединения echo "$errstr ($errno)<br />\n"; } else { //пишешь заголовки, к примеру $header = 'POST http://site.com/login HTTP/1.0'; $header .= //подставляешь нужные заголовки... for(){ //кол-во вложенных циклов зависит от кол-ва переменных для брута // если логин и пароль, то 2-а цикла $header .= //дописываешь нужные переменные //отправляем запрос fputs($fp, $header); //построчно считываешь соединение //и парсишь for($i=0;$i<count($answer);$i++) { $answer[]=fgets($socket); if(strpos($answer[$i], 'базис сравнения')!==false) //... даллее действие при совпадении fclose($sock); } } ?>
Спасибо, конечно, за ответы всем.. Вот только вы меня не так поняли.. =) Брутить я никого не собираюсь.. Просто мне надо повторить описанные выше запросы при помощи скрипта на пхп. Т.е. скрипт должен отправлять POST запрос на site.com/login, чтобы получить куки: Set-Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; path=/; domain=.site.com Set-Cookie: loginname=usver; path=/; domain=.site.com Set-Cookie: id_hash=bca49e192dce15ec725dce475e59d1a0; path=/; domain=.site.com сохранить эти куки в переменную, а потом в GET запросе выставить эти куки. Я просто не знаю, как это реализовать. Получается скрипт после ответа сервера получает куки и идентификатор сессии и GET запросом переходит на нужную мне страницу www.site.com/dir/dir2. Список логинов.паролей юзеров у меня есть. Основная трудность, как подставить куки, полученные в ответе сервера в GET запрос? Спасибо!
вот скриптик, рег флудер, немного переделаешь регулярку и добавишь loginass в отправку из файлика. http://slil.ru/24253456
МДА, ещё с первого поста можно было понять, что сокетом он уже умеет пользовапться и ему не нужно учиться им пользоваться второй раз, ему нужно пропарсить куки. Code: [color=#00AA00][color=#0000FF]<?[/COLOR] $a_cookie [color=#0000FF]=[/COLOR] [color=#00FF00]array[/COLOR][color=#0000FF]()[/COLOR][color=#FF0000];[/COLOR] ParseCookie[color=#0000FF]([/COLOR][/COLOR][color=#FFFF00]'HTTP/1.0 302 Found Date: Tue, 17 Apr 2007 18:23:23 GMT Server: Apache X-Powered-By: PHP/5.2.0-8 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: private Pragma: no-cache Set-Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; path=/; domain=.site.com Set-Cookie: loginname=usver; path=/; domain=.site.com Set-Cookie: id_hash=bca49e192dce15ec725dce475e59d1a0; path=/; domain=.site.com location: http://site.com/authloggedin Content-Length: 0 nnCoection: close Content-Type: text/html; charset=UTF-8 RemovedHdr: Keep-Alive'[/COLOR][color=#00AA00][color=#0000FF],[/COLOR] $a_cookie[color=#0000FF])[/COLOR][color=#FF0000];[/COLOR] ParseCookie[color=#0000FF]([/COLOR][/COLOR][color=#FFFF00]'HTTP/1.0 302 Found Date: Tue, 17 Apr 2007 18:23:23 GMT Server: Apache X-Powered-By: PHP/5.2.0-8 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: private Pragma: no-cache Set-Cookie: PHPSESSID=2f83a67a61ef83594528c117c25a7da3 Content-Length: 0 nnCoection: close Content-Type: text/html; charset=UTF-8 RemovedHdr: Keep-Alive'[/COLOR][color=#00AA00][color=#0000FF],[/COLOR] $a_cookie[color=#0000FF])[/COLOR][color=#FF0000];[/COLOR] $cookie [color=#0000FF]=[/COLOR] [color=#00FF00]array[/COLOR][color=#0000FF]()[/COLOR][color=#FF0000];[/COLOR] [color=#00FF00]foreach[/COLOR][color=#0000FF]([/COLOR]$a_cookie [color=#00FF00]as[/COLOR] $param [color=#0000FF]=>[/COLOR] $value[color=#0000FF])[/COLOR] [color=#FF0000]{[/COLOR] $cookie[color=#0000FF][] =[/COLOR] [/COLOR][color=#FFFF00]"[color=#00AA00]$param[/COLOR]=[color=#00AA00]$value[/COLOR]"[/COLOR][color=#00AA00][color=#FF0000]; }[/COLOR] [color=#00FF00]echo[/COLOR] [/COLOR][color=#FFFF00]'<pre>Cookie: '[/COLOR][color=#00AA00][color=#0000FF].[/COLOR][color=#00FF00]implode[/COLOR][color=#0000FF]([/COLOR][/COLOR][color=#FFFF00]'; '[/COLOR][color=#00AA00][color=#0000FF],[/COLOR] $cookie[color=#0000FF]).[/COLOR][/COLOR][color=#FFFF00]'</pre>'[/COLOR][color=#00AA00][color=#FF0000];[/COLOR] [/COLOR][color=#888888]# ************************************************* [/COLOR][color=#00AA00][color=#00FF00]function[/COLOR] ParseCookie[color=#0000FF]([/COLOR]$text[color=#0000FF],[/COLOR] [color=#FF0000]&[/COLOR]$cookie[color=#0000FF])[/COLOR] [color=#FF0000]{[/COLOR] [color=#00FF00]preg_match_all[/COLOR][color=#0000FF]([/COLOR][/COLOR][color=#FFFF00]'[color=#FF0000]/[/COLOR]Set[color=#00FF00]-[/COLOR]Cookie:[color=#FFFFFF]\s[/COLOR][color=#00FF00]*([/COLOR][color=#FFFFFF]\S[/COLOR][color=#00FF00][[/COLOR]^[color=#FFFFFF]\r\n[/COLOR][color=#00FF00]]*[/COLOR][color=#00FF00])[/COLOR][color=#FFFFFF]\s[/COLOR][color=#00FF00]*[[/COLOR][color=#FFFFFF]\r\n[/COLOR][color=#00FF00]][/COLOR][color=#FF0000]/sU[/COLOR]'[/COLOR][color=#00AA00][color=#0000FF],[/COLOR] $text[color=#0000FF],[/COLOR] $matches[color=#0000FF],[/COLOR] PREG_SET_ORDER[color=#0000FF])[/COLOR][color=#FF0000];[/COLOR] [color=#00FF00]foreach[/COLOR][color=#0000FF]([/COLOR]$matches [color=#00FF00]as[/COLOR] $cur[color=#0000FF])[/COLOR] [color=#FF0000]{[/COLOR] $elements [color=#0000FF]=[/COLOR] [color=#00FF00]preg_split[/COLOR][color=#0000FF]([/COLOR][/COLOR][color=#FFFF00]'[color=#FF0000]/[/COLOR][color=#FFFFFF]\s[/COLOR][color=#00FF00]*[/COLOR];[color=#FFFFFF]\s[/COLOR][color=#00FF00]*[/COLOR][color=#FF0000]/[/COLOR]'[/COLOR][color=#00AA00][color=#0000FF],[/COLOR] $cur[color=#0000FF][[/COLOR][color=#00FF00]1[/COLOR][color=#0000FF]])[/COLOR][color=#FF0000];[/COLOR] [color=#00FF00]foreach[/COLOR][color=#0000FF]([/COLOR]$elements [color=#00FF00]as[/COLOR] $element[color=#0000FF])[/COLOR] [color=#FF0000]{[/COLOR] [color=#00FF00]list[/COLOR][color=#0000FF]([/COLOR]$param[color=#0000FF],[/COLOR] $value[color=#0000FF]) =[/COLOR] [color=#00FF00]preg_split[/COLOR][color=#0000FF]([/COLOR][/COLOR][color=#FFFF00]'[color=#FF0000]/[/COLOR][color=#FFFFFF]\s[/COLOR][color=#00FF00]*[/COLOR]=[color=#FFFFFF]\s[/COLOR][color=#00FF00]*[/COLOR][color=#FF0000]/[/COLOR]'[/COLOR][color=#00AA00][color=#0000FF],[/COLOR] $element[color=#0000FF])[/COLOR][color=#FF0000];[/COLOR] $cookie[color=#0000FF][[/COLOR]$param[color=#0000FF]] =[/COLOR] $value[color=#FF0000]; }[/COLOR] [color=#FF0000]} }[/COLOR] [color=#0000FF]?>[/COLOR][/COLOR] Эту функцию можно вызывать после получения каждой страници, так как они могут добавлять новые переменные или заменять старые. [Great:] ОМФГ, Ну и форматирование=\\\
Всем огромное спасибо за ответы! Хидден - мегареспект! =) В принципе я с самого начала шел в правильном направлении, но меня смущала ошибка, от которой я так и не избавился.. Вот пхп код пост запроса на сервак: PHP: <?php $hostname = "site.com"; $path = "/login"; $page=""; $data="username=usver&password=123456&processlogin=1"; $fp = fsockopen($hostname, 80, $errno, $errstr, 30); if (!$fp) echo "$errstr ($errno)<br />\n"; else { $hd = "POST $path HTTP/1.1\r\n"; $hd .="Host: $host\r\n"; $hd .="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\r\n"; $hd .="Referer: http://site.com/login\r\n"; $hd .="Accept-Language: ru\r\n"; $hd .="Content-Type: application/x-www-form-urlencoded\r\n"; $hd .="Proxy-Connection: Keep-Alive\r\n"; $hd .="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n"; $hd .= "Content-Length: ".strlen($data)."\r\n"; $hd .= "Pragma: no-cache\r\n"; $hd .= "Cookie: PHPSESSID=2f83a67a61ef83594528c117c25a7da3\r\n"; $hd .= "Connection: close\r\n\r\n"; $hd .= $data; fwrite($fp, $hd); while (!feof($fp)) { $page .= fgets($fp, 1024); } fclose($fp); } echo $page; ?> На денвере скрипт выдавал ошибку "Fatal error: Maximum execution time of.." на хосте работал, но оооочень медленно. Поставил set_time_limit(0); - стал работать и на денвере, но также медленно. Я просто не понимаю одного: если отправляешь тот же самый пост запрос при помощи Inetcrack'a, то через секунду приходит ответ сервера, а если скриптом - приходится ждать 5-10 минут... Что я делаю не так?
используй http/1.0 вместо http/1.1 т.е.: PHP: //в место этого:: $hd = "POST $path HTTP/1.1\r\n"; //это:: $hd = "POST $path HTTP/1.0\r\n"; это поможет увеличить скорость в несколько раз.
Все. Вопрос снимается. Сам нашел. $hd .="Proxy-Connection: Keep-Alive\r\n"; - не нужна. 2mR_LiNK[deface_0nl: Ок. Ща попробую!
Млин... Или я добью этот скрипт, или он меня... В ответе сервера, если отправлять через инеткрэк присутствуют: Set-Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; path=/; domain=.site.com Set-Cookie: loginname=usver; path=/; domain=.site.com Set-Cookie: id_hash=bca49e192dce15ec725dce475e59d1a0; path=/; domain=.site.com а если отправлять через скрипт, то только Set-Cookie: loginname=usver; path=/; domain=.site.com Set-Cookie: id_hash=bca49e192dce15ec725dce475e59d1a0; path=/; domain=.site.com А без идентефикатора сессии PHPSESSID ничего сделать не получится.. Что это может быть за фигня?
Возможно что ты сессию получаешь ещё до логина, потом передаёшь её во время логина, и только тогда получаешь другую сессию.
Это потому, что ты при первом же запросе передаешь идентификатор сессии, который ты, можно сказать, от балды выдумал, а доверчивый ПХП ведется... И ведется, кстати не просто так, а потому, что этот PHPSESSID был им уже выдан некоторое время назад инеткрэку, запущенному с твоей машины. Поэтому, чтобы тебе выдало новый PHPSESSID, закомментируй строчку: PHP: $hd .= "Cookie: PHPSESSID=2f83a67a61ef83594528c117c25a7da3\r\n"; // зы: сиреневенький фон меня когда-нибудь убьет%(
неа.. я ее закомментил сразу же после первой неудачи.. не в этом дело.. даже не знаю, что еще можно предпринять..
нарики PHP: $mda = get_headers('http://mail.ru'); foreach($mda as $v){ if(stristr($v, 'Set-Cookie')){ $s .= $v."\n"; } } echo $s;