Привет, народ! Пришел к вам после того, как меня с бесцеремонно погнали с форума на phpclub.ru. Надеюсь, на страницах вашего форума разрешено говорить о стандартных библиотеках PHP, и никто не станет предвзято делать выводы по поводу того, что и для чего я делаю. Спасибо за понимание. У меня возникла интересная проблемка. Банальная ситуация: пишу робота, который должен логиниться на сайт с заданными параметрами, и производить какие-то манипуляции. Юзаю курл. Страница логина замудренная с двумя перенаправлениями. Схема действий следующая: 1. Посылаю пост. Получаю куки и новый локэйшин. 2. Открываю локэйшин, передавая куки. Получаю новый локэйшин. 3. Открываю новый локэйшин, передавая куки... До этого вроде бы все правильно шло. Но! В ответ получаю страницу логина! Тщательно перепроверил данные формы, которые я посылаю, убедился, что правильно формирую куки. Все равно не выходит сэмулировать поведение браузера. Я наконец запускаю Ethereal и начинаю анализировать запросы и ответы, которые выполняет браузер. Браузер ведет себя практически так же вплоть до третьего запроса: здесь он открывает новый локэйшин, и передает НОВЫЙ набор куков!!! Но первый ответ на запрос устанавливает только старые куки, а второй вообще не содержит в заголовков Set-Cookie. Я очищал куки, но браузер снова их от куда-то берет! Пересмотрел HTML, думал может через мета-тэги... И там нет! А жаваскриптами там тем более не пахнет. Только сухие сообщения типа "Page moved". Что за чудеса? Разве есть еще способы устанавливать куки?
) Пациента зовут chat.mail.ru. Хочу написать бота и запустить его в любимую комнату. Тока вот войти в комнату как раз и не получается Вот код, который не хочет работать. Код (Text): $aConf = array( 'login' => array( 'url' => 'http://my.chat.mail.ru/cgi-bin/auth', 'form' => array( 'page' => 'http://chat.mail.ru/', 'FailPage' => 'http://chat.mail.ru/data-xml/erlogin.html', 'enter' => '1812', 'mra' => '', 'mra_status' => '', 'signore' => '', 'silent' => '', 'Login' => 'bot', 'Domain' => 'mail.ru', 'Password' => 'bot', 'nick' => 'Бот', 'nickcolor' => '3', // Red 'textcolor' => '3', // Red 'roomleft' => '', 'room' => '1089056', 'silent_ch' => '', 'signore_ch' => '', ), ), 'log' => array( 'error_reporting' => E_ALL, ), ); error_reporting($aConf['log']['error_reporting']); $aCookies = array(); // Authentication $sResponse = doHttpQuery( $aConf['login']['url'], true, null, makeQueryString($aConf['login']['form']) ); $aCookies += getCookies($sResponse); echo "\n============================\n\n"; echo makeCookiesString($aCookies); echo "\n============================\n\n"; echo $sResponse; $sRedirectUrl = getHeader($sResponse, 'Location'); $iRedirectCount = 1; while (isset($sRedirectUrl)) { $sResponse = doHttpQuery($sRedirectUrl, true, makeCookiesString($aCookies)); $aCookies += getCookies($sResponse); echo "\n============================\n\n"; echo makeCookiesString($aCookies); echo "\n============================\n\n"; echo $sResponse; $sRedirectUrl = getHeader($sResponse, 'Location'); $iRedirectCount++; if ($iRedirectCount > 10) { die; } } $sResponse = doHttpQuery( 'http://chat.mail.ru/cgi-xml/chat', true, makeCookiesString($aCookies) ); $aCookies += getCookies($sResponse); echo "\n============================\n\n"; echo $sResponse; function makeQueryString($aParameters) { $sQueryString = ''; foreach ($aParameters as $sName => $sValue) { if ($sQueryString != '') $sQueryString .= '&'; $sQueryString .= urlencode($sName).'='.urlencode($sValue); } return $sQueryString; } function makeCookiesString($aParameters) { $sQueryString = ''; foreach ($aParameters as $sName => $sValue) { if ($sQueryString != '') $sQueryString .= '; '; $sQueryString .= $sName.'='.$sValue; } return $sQueryString; } function getCookies($sResponse) { $aCookies = array(); $aCookieMatches = getHeader($sResponse, 'Set-Cookie', true); foreach ($aCookieMatches as $sCookie) { preg_match_all('/([^=;\s]*)=([^;$]*)/', $sCookie, $aMatches); $iExpires = null; for ($i = 1; $i < count($aMatches[0]); $i++) { if (strtolower($aMatches[1][$i]) == 'expires') { $iExpires = strtotime($aMatches[2][$i]); break; } } $sName = urldecode($aMatches[1][0]); if (!isset($iExpires) || $iExpires > time()) { $aCookies[$sName] = urldecode($aMatches[2][0]); } elseif ($iExpires <= time() && isset($aCookies[$sName])) { unset($aCookies[$sName]); } } return $aCookies; } function getHeader($sResponse, $sName, $bArray = false) { $sRegExp = '/^'.preg_quote($sName).':\s+([^\n]*)/im'; preg_match_all($sRegExp, $sResponse, $aMatches); if ($bArray) { return $aMatches[1]; } elseif (count($aMatches[1]) > 0) { return $aMatches[1][0]; } else { return null; } } function doHttpQuery( $sUrl, $bHeader = true, $sCookies = null, $sPostData = null) { $rCurl = curl_init($sUrl); curl_setopt($rCurl, CURLOPT_HEADER, (int)$bHeader); // Include header curl_setopt($rCurl, CURLOPT_RETURNTRANSFER, 1); // No print if (isset($sCookies)) { curl_setopt($rCurl, CURLOPT_COOKIE, $sCookies); // Send cookie } if (isset($sPostData)) { curl_setopt($rCurl, CURLOPT_POST, 1); // Use POST curl_setopt($rCurl, CURLOPT_POSTFIELDS, $sPostData); // POST data } $sResponse = curl_exec($rCurl); curl_close($rCurl); return $sResponse; }
Я так подумал и решил все-таки убрать логин и пароль из конфига Так что для запуска скрипта нужно указать свой аккаунт
Вот это, наверное, будет полезнее, чем код скрипта. Потому что сам скрипт ведет себя абсолюнто адекватно ответам сервера. Т.е. реакция скрипта именно такая, какой я добивался. Ниже я привожу распечатку пакетов между сервером и браузером (не скриптом). Особо интересым мне представляется последний заголовок в последнем запросе: Код (Text): Cookie: Login=*******; Domain=mail.ru; nick=%u0428%u0435%u043B%u0443%u0434%u0438%u0432%u044B% u0439_%u041A%u043E%u0442; nickcolor=3; textcolor=3; room=1089056; silent=0; signore=0; MailUser=1; Mpop=1154770654:577f475f035b7a7b19050219091d011 Именно в них и проблема. Если браузер отсылает эти куки серверу, то он должен их от куда-то получать. Но во всех предыдущих ответах сервера нету соответствующих кук. Поэтому мой скрипт, в отличие от браузера, с последним запросом не отправляет новые куки. Он просто не знает о них. Можно, конечно, это захардкодить, а вопрос не в этом, а скорее принципиальный. Получается, что есть другой способ принимать куки, кроме как заголовков Set-Cookie. Браузер этот способ знает, а мой скрипт не знает. Потому что, собственно говоря, я и сам не могй понять, что это за способ Код (Text): No. Time Source Destination Protocol Info 6 0.236587 192.168.20.5 194.67.23.233 HTTP POST /cgi-bin/auth HTTP/1.1 (application/x-www-form-urlencoded) Frame 6 (420 bytes on wire, 420 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4232 (4232), Dst Port: http (80), Seq: 470, Ack: 1, Len: 366 Reassembled TCP Segments (835 bytes): #4(469), #6(366) Hypertext Transfer Protocol POST /cgi-bin/auth HTTP/1.1\r\n Request Method: POST Request URI: /cgi-bin/auth Request Version: HTTP/1.1 Host: my.chat.mail.ru\r\n User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6\r\n Accept: text/xml,application/xml,application/xhtml+xml,text/html; q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n Accept-Encoding: gzip,deflate\r\n Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n Keep-Alive: 300\r\n Connection: keep-alive\r\n Referer: http://chat.mail.ru/\r\n Content-Type: application/x-www-form-urlencoded\r\n Content-Length: 294\r\n \r\n Line-based text data: application/x-www-form-urlencoded page=http%3A%2F%2Fchat.mail.ru%2F&FailPage=http%3A%2F% 2Fchat.mail.ru%2Fdata-xml%2Ferlogin.html&enter=1812&signore=& silent=&mra=&mra_status=&signore=&silent=&Login=*******& Domain=mail.ru&Password=*********&nick=%D8%E5%EB%F3%E4% E8%E2%FB%E9_% No. Time Source Destination Protocol Info 7 0.355416 194.67.23.233 192.168.20.5 TCP http > 4232 [ACK] Seq=1 Ack=836 Win=7504 Len=0 Frame 7 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4232 (4232), Seq: 1, Ack: 836, Len: 0 No. Time Source Destination Protocol Info 8 0.399570 194.67.23.233 192.168.20.5 TCP [TCP segment of a reassembled PDU] Frame 8 (1506 bytes on wire, 1506 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4232 (4232), Seq: 1, Ack: 836, Len: 1452 No. Time Source Destination Protocol Info 9 0.403782 194.67.23.233 192.168.20.5 TCP [TCP segment of a reassembled PDU] Frame 9 (1293 bytes on wire, 1293 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4232 (4232), Seq: 1453, Ack: 836, Len: 1239 No. Time Source Destination Protocol Info 10 0.404886 192.168.20.5 194.67.23.233 TCP 4232 > http [ACK] Seq=836 Ack=2692 Win=65535 Len=0 Frame 10 (54 bytes on wire, 54 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4232 (4232), Dst Port: http (80), Seq: 836, Ack: 2692, Len: 0 No. Time Source Destination Protocol Info 11 0.407230 194.67.23.233 192.168.20.5 HTTP HTTP/1.1 302 Found (text/html) Frame 11 (756 bytes on wire, 756 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4232 (4232), Seq: 2692, Ack: 836, Len: 702 Reassembled TCP Segments (3393 bytes): #8(1452), #9(1239), #11(702) Hypertext Transfer Protocol HTTP/1.1 302 Found\r\n Request Version: HTTP/1.1 Response Code: 302 Date: Sat, 05 Aug 2006 09:37:33 GMT\r\n Server: 3WservRT 2001, VxWorks 5.4\r\n Set-Cookie: ticket=; path=/; expires=Thu, 16 Oct 2003 09:37:34 GMT; domain=.mail.ru\r\n Set-Cookie: ticket=; path=/; expires=Thu, 16 Oct 2003 09:37:34 GMT; domain=.chat.mail.ru\r\n P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID PSAo PSDo OUR BUS UNI NAV STA INT"\r\n Set-Cookie: MailUser=1; expires=Fri, 03 Nov 2006 09:37:34 GMT; path=/; domain=.mail.ru\r\n Pragma: no-cache\r\n Cache-Control: private\r\n Set-Cookie: Mpop=1154770654:577f475f035b7a7b19050219091d011b0005034f6 a5d5e465e0107041b01027b1f455058665a5e44105a545e591f4642: *******@mail.ru:; path=/; expires=Fri, 03 Nov 2006 09:37:34 GMT; domain=.mail.ru\r\n Set-Cookie: t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAABAAABAAAAAAAAAAAAAAEBvAcA; path=/; expires=Thu, 01 Feb 2007 09:37:34 GMT; domain=.mail.ru\r\n Location: http://my.chat.mail.ru/cgi-bin/checkcookie?id=577f475f035b7a7b1905 0219091d011b0005034f6a5d5e465e0107041b01027b1f455058665a5e4 4105a545e591f4642&user=*******&domain=mail.ru&page=http%3a% 2f%2fchat.mail.ru%2f%3fmra%3d%26roomleft%3d%2 Connection: close\r\n Transfer-Encoding: chunked\r\n Content-Type: text/html\r\n \r\n HTTP chunked response Line-based text data: text/html <html> <head><title>Redirect to http://my.chat.mail.ru/cgi-bin/checkcookie? id=577f475f035b7a7b19050219091d011b0005034f6a5d5e465e0107041b 01027b1f455058665a5e44105a545e591f4642&user=*******& domain=mail.ru&page=http%3a%2f%2fchat.mail.ru%2f%3fmra%3d% <body><a href="http://my.chat.mail.ru/cgi-bin/checkcookie? id=577f475f035b7a7b19050219091d011b0005034f6a5d5e465e0107041 b01027b1f455058665a5e44105a545e591f4642&user=*******& domain=mail.ru&page=http%3a%2f%2fchat.mail.ru%2f%3fmra%3d% 26roomleft </html> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>302 Found</TITLE> </HEAD><BODY> <H1>Found</H1> The document has moved <A HREF="http://my.chat.mail.ru/cgi-bin/ checkcookie?id=577f475f035b7a7b19050219091d011b0005034f6a5d5e 465e0107041b01027b1f455058665a5e44105a545e591f4642& user=*******&domain=mail.ru&page=http%3a%2f%2f chat.m <HR> <ADDRESS>3WservRT 2001, VxWorks 5.4 Server at my.chat.mail.ru Port 80</ADDRESS> </BODY></HTML> No. Time Source Destination Protocol Info 12 0.425357 192.168.20.5 194.67.23.233 TCP 4232 > http [ACK] Seq=836 Ack=3395 Win=64833 Len=0 Frame 12 (54 bytes on wire, 54 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4232 (4232), Dst Port: http (80), Seq: 836, Ack: 3395, Len: 0 No. Time Source Destination Protocol Info 13 0.425838 192.168.20.5 194.67.23.233 TCP 4232 > http [FIN, ACK] Seq=836 Ack=3395 Win=64833 Len=0 Frame 13 (54 bytes on wire, 54 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4232 (4232), Dst Port: http (80), Seq: 836, Ack: 3395, Len: 0 No. Time Source Destination Protocol Info 14 0.454247 192.168.20.5 194.67.23.233 TCP 4233 > http [SYN] Seq=0 Ack=0 Win=65535 Len=0 MSS=1460 Frame 14 (62 bytes on wire, 62 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4233 (4233), Dst Port: http (80), Seq: 0, Ack: 0, Len: 0 No. Time Source Destination Protocol Info 15 0.535264 194.67.23.233 192.168.20.5 TCP http > 4232 [ACK] Seq=3395 Ack=837 Win=7504 Len=0 Frame 15 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4232 (4232), Seq: 3395, Ack: 837, Len: 0 No. Time Source Destination Protocol Info 16 0.575074 194.67.23.233 192.168.20.5 TCP http > 4233 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1452 Frame 16 (62 bytes on wire, 62 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4233 (4233), Seq: 0, Ack: 1, Len: 0 No. Time Source Destination Protocol Info 17 0.584306 192.168.20.5 194.67.23.233 TCP 4233 > http [ACK] Seq=1 Ack=1 Win=65535 Len=0 Frame 17 (54 bytes on wire, 54 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4233 (4233), Dst Port: http (80), Seq: 1, Ack: 1, Len: 0 No. Time Source Destination Protocol Info 18 0.590703 192.168.20.5 194.67.23.233 HTTP GET /cgi-bin/checkcookie?id=577f475f035b7a7b19050219091d011b0005034f 6a5d5e465e0107041b01027b1f455058665a5e44105a545e591f4642& user=*******&domain=mail.ru&page=http%3a%2f%2fchat.mail.ru%2f %3fmra%3d%26roomleft%3d%26nick%3d%25d8%25e5%25eb%25f3 %25e4%25e8%25e2%25fb%25e9_%25ca%25ee%25f2%26room%3d 1089056%26enter%3d1812%26signore%3d%2500%26mra_status%3d %26textcolor%3d3%26nickcolor%3d3%26silent%3d%2500 HTTP/1.1 Frame 18 (1145 bytes on wire, 1145 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4233 (4233), Dst Port: http (80), Seq: 1, Ack: 1, Len: 1091 Hypertext Transfer Protocol GET /cgi-bin/checkcookie?id=577f475f035b7a7b19050219091d011b 0005034f6a5d5e465e0107041b01027b1f455058665a5e44105a545e591 f4642&user=*******&domain=mail.ru&page=http%3a%2f%2f chat.mail.ru%2f%3fmra%3d%26roomleft%3d%26nick%3d%25d8%25 e5%25eb%25f3 Request Method: GET Request URI [truncated]: /cgi-bin/checkcookie?id=577f475f035b7 a7b19050219091d011b0005034f6a5d5e465e0107041b01027b1f455058 665a5e44105a545e591f4642&user=*******&domain=mail.ru&page= http%3a%2f%2fchat.mail.ru%2f%3fmra%3d%26roomleft%3d%26nick %3 Request Version: HTTP/1.1 Host: my.chat.mail.ru\r\n User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6\r\n Accept: text/xml,application/xml,application/xhtml+xml,text/html; q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n Accept-Encoding: gzip,deflate\r\n Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n Keep-Alive: 300\r\n Connection: keep-alive\r\n Referer: http://chat.mail.ru/\r\n Cookie: MailUser=1; Mpop=1154770654:577f475f035b7a7b1905021 9091d011b0005034f6a5d5e465e0107041b01027b1f455058665a5e4410 5a545e591f4642:*******@mail.ru:; t=obLD1AAAAAAIAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAA AAAAAAAAEBvA \r\n No. Time Source Destination Protocol Info 19 0.715870 194.67.23.233 192.168.20.5 TCP http > 4233 [ACK] Seq=1 Ack=1092 Win=7637 Len=0 Frame 19 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4233 (4233), Seq: 1, Ack: 1092, Len: 0 No. Time Source Destination Protocol Info 20 0.728242 194.67.23.233 192.168.20.5 TCP [TCP segment of a reassembled PDU] Frame 20 (969 bytes on wire, 969 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4233 (4233), Seq: 1, Ack: 1092, Len: 915 No. Time Source Destination Protocol Info 21 0.730158 194.67.23.233 192.168.20.5 HTTP HTTP/1.1 302 Found (text/html) Frame 21 (528 bytes on wire, 528 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4233 (4233), Seq: 916, Ack: 1092, Len: 474 Reassembled TCP Segments (1389 bytes): #20(915), #21(474) Hypertext Transfer Protocol HTTP/1.1 302 Found\r\n Request Version: HTTP/1.1 Response Code: 302 Date: Sat, 05 Aug 2006 09:37:34 GMT\r\n Server: 3WservRT 2001, VxWorks 5.4\r\n Location: http://chat.mail.ru/?mra=&roomleft=&nick=%d8%e5%eb %f3%e4%e8%e2%fb%e9_%ca%ee%f2&room=1089056&enter=1812 &signore=%00&mra_status=&textcolor=3&nickcolor=3&silent=%00\r\n Connection: close\r\n Transfer-Encoding: chunked\r\n Content-Type: text/html\r\n \r\n HTTP chunked response Line-based text data: text/html <html> <head><title>Redirect to http://chat.mail.ru/?mra=&roomleft=&nick= %d8%e5%eb%f3%e4%e8%e2%fb%e9_%ca%ee%f2&room=1089056 &enter=1812&signore=%00&mra_status=&textcolor=3&nickcolor=3& silent=%00</title></head> <body><a href="http://chat.mail.ru/?mra=&roomleft=&nick=%d8%e5 %eb%f3%e4%e8%e2%fb%e9_%ca%ee%f2&room=1089056& enter=1812&signore=%00&mra_status=&textcolor=3&nickcolor=3& silent=%00">http://chat.mail.ru/?mra=&roomleft=&nick=%d8%e5 %eb%f3%e4%e8%e </html> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>302 Found</TITLE> </HEAD><BODY> <H1>Found</H1> The document has moved <A HREF="http://chat.mail.ru/?mra=& roomleft=&nick=%d8%e5%eb%f3%e4%e8%e2%fb%e9_%ca%ee %f2&room=1089056&enter=1812&signore=%00& mra_status=&textcolor=3&nickcolor=3&silent=%00"> here</A> <HR> <ADDRESS>3WservRT 2001, VxWorks 5.4 Server at my.chat.mail.ru Port 80</ADDRESS> </BODY></HTML> No. Time Source Destination Protocol Info 22 0.731461 194.67.23.233 192.168.20.5 TCP http > 4233 [FIN, ACK] Seq=1390 Ack=1092 Win=7637 Len=0 Frame 22 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4233 (4233), Seq: 1390, Ack: 1092, Len: 0 No. Time Source Destination Protocol Info 23 0.747392 192.168.20.5 194.67.23.233 TCP 4233 > http [ACK] Seq=1092 Ack=1390 Win=64146 Len=0 Frame 23 (54 bytes on wire, 54 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4233 (4233), Dst Port: http (80), Seq: 1092, Ack: 1390, Len: 0 No. Time Source Destination Protocol Info 24 0.747944 192.168.20.5 194.67.23.233 TCP 4233 > http [ACK] Seq=1092 Ack=1391 Win=64146 Len=0 Frame 24 (54 bytes on wire, 54 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4233 (4233), Dst Port: http (80), Seq: 1092, Ack: 1391, Len: 0 No. Time Source Destination Protocol Info 25 0.750763 192.168.20.5 194.67.23.233 TCP 4233 > http [FIN, ACK] Seq=1092 Ack=1391 Win=64146 Len=0 Frame 25 (54 bytes on wire, 54 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.233 (194.67.23.233) Transmission Control Protocol, Src Port: 4233 (4233), Dst Port: http (80), Seq: 1092, Ack: 1391, Len: 0 No. Time Source Destination Protocol Info 26 0.791584 192.168.20.5 194.67.23.151 TCP 4234 > http [SYN] Seq=0 Ack=0 Win=65535 Len=0 MSS=1460 Frame 26 (62 bytes on wire, 62 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.151 (194.67.23.151) Transmission Control Protocol, Src Port: 4234 (4234), Dst Port: http (80), Seq: 0, Ack: 0, Len: 0 No. Time Source Destination Protocol Info 27 0.854297 194.67.23.233 192.168.20.5 TCP http > 4233 [ACK] Seq=1391 Ack=1093 Win=7637 Len=0 Frame 27 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.233 (194.67.23.233), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4233 (4233), Seq: 1391, Ack: 1093, Len: 0 No. Time Source Destination Protocol Info 28 0.889942 194.67.23.151 192.168.20.5 TCP http > 4234 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1452 Frame 28 (62 bytes on wire, 62 bytes captured) Ethernet II, Src: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e), Dst: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a) Internet Protocol, Src: 194.67.23.151 (194.67.23.151), Dst: 192.168.20.5 (192.168.20.5) Transmission Control Protocol, Src Port: http (80), Dst Port: 4234 (4234), Seq: 0, Ack: 1, Len: 0 No. Time Source Destination Protocol Info 29 0.898954 192.168.20.5 194.67.23.151 TCP 4234 > http [ACK] Seq=1 Ack=1 Win=65535 Len=0 Frame 29 (54 bytes on wire, 54 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.151 (194.67.23.151) Transmission Control Protocol, Src Port: 4234 (4234), Dst Port: http (80), Seq: 1, Ack: 1, Len: 0 No. Time Source Destination Protocol Info 30 0.901263 192.168.20.5 194.67.23.151 HTTP GET /?mra=&roomleft=&nick=%d8%e5%eb%f3%e4%e8%e2%fb%e9_%ca %ee%f2&room=1089056&enter=1812&signore=%00&mra_status=& textcolor=3&nickcolor=3&silent=%00 HTTP/1.1 Frame 30 (1065 bytes on wire, 1065 bytes captured) Ethernet II, Src: Giga-Byt_10:fd:2a (00:0d:61:10:fd:2a), Dst: EdimaxTe_e5:d8:7e (00:50:fc:e5:d8:7e) Internet Protocol, Src: 192.168.20.5 (192.168.20.5), Dst: 194.67.23.151 (194.67.23.151) Transmission Control Protocol, Src Port: 4234 (4234), Dst Port: http (80), Seq: 1, Ack: 1, Len: 1011 Hypertext Transfer Protocol GET /?mra=&roomleft=&nick=%d8%e5%eb%f3%e4%e8%e2%fb %e9_%ca%ee%f2&room=1089056&enter=1812&signore=%00& mra_status=&textcolor=3&nickcolor=3&silent=%00 HTTP/1.1\r\n Request Method: GET Request URI: /?mra=&roomleft=&nick=%d8%e5%eb%f3%e4%e8 %e2%fb%e9_%ca%ee%f2&room=1089056&enter=1812&signore= %00&mra_status=&textcolor=3&nickcolor=3&silent=%00 Request Version: HTTP/1.1 Host: chat.mail.ru\r\n User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6\r\n Accept: text/xml,application/xml,application/xhtml+xml,text/html; q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n Accept-Encoding: gzip,deflate\r\n Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n Keep-Alive: 300\r\n Connection: keep-alive\r\n Referer: http://chat.mail.ru/\r\n Cookie: Login=*******; Domain=mail.ru; nick=%u0428%u0435%u0 43B%u0443%u0434%u0438%u0432%u044B%u0439_%u041A%u043E %u0442; nickcolor=3; textcolor=3; room=1089056; silent=0; signore=0; MailUser=1; Mpop=1154770654:577f475f035b7a7b19050219091d011 \r\n
1. Какие из этих кук ты считаешь новыми? 2. Куки можно поставить на странице клиентским сценарием. 3. Спамить чаты не есть хорошо.
1. Вот эти: "Login=*******; Domain=mail.ru; nick=%u0428%u0435%u043B%u0443%u0434%u0438%u0432%u044B% u0439_%u041A%u043E%u0442; nickcolor=3; textcolor=3; room=1089056; silent=0; signore=0;" 2. Я привел полный дамп пакетов. Ты видишь там сценарии? Я не вижу, хоть убей. И метатэгов не вижу. 3. А почему ты решил, что я собираюсь спамить чаты? Я сам не люблю спамеров. Я заядлый чатланец, и просто хочу поместить бота в свою комнату, чтобы он облегчал мне жизнь. Почему вообще все сразу подозревают меня в чем-то нехорошем? То в воростве контента, то в спамерстве... Вот у меня обычное дело, когда заказчик просит написать какую-то утилиту, которая просто представляла бы данные в более удобном виде. Естественно, что владельцы веб-сервисом не дадут мне прямой доступ к своей базе. И что тогда плохого, если я пишу скрипт, который просто позволяет просмотреть те же данные в более удобном виде? А ведь если бы я привел тут подобный код, я бы стопудово был бы обвинен в воровстве контента! Думаю, не стоит быть столь поспешными с выводами.
Хе-хе ) И не лень было раскодировать? Из скрипта, или какую-то тулзу удобную пользвуешь? Да! Сейчас попробовал снова! Удалил куки доменов mail.ru и chat.mail.ru. Залогинился в чат - они снова появились. Просмотрел лог пакетов - сного никакого намека на установку значений кук домена chat.mail.ru. Кстати, те самые куки, которые я не могу поймать, относятся именно к домену chat.mail.ru. А те, которые поймал - к домену mail.ru. Ну если я через браузер логинюсь - значит значение корректное. Дамп пакетов не имеет отношеиня к моему скрипту. Это пакеты, перехваченные в то время, как я логинился через браузер. И тем не менее в дампе нигде нет установки кук для домена chat.mail.ru, а они от куда-то берутся. Вот я и не пойму где они прячутся и как проникают в браузер, и от куда мне их собсно и нужно ловаить.
в дампе все страницы получены с 302-м статусом. это, так называемый, редирект. после него на другую страницу кидает, там, возможно, куки и ставятся.
Да. Если тебе не трудно, давай пройдем по всем этим запросам, отбросив мусор, который я предусмотрительно оставил в предыдущем сообщении. Мало ли что... ;-). Вот первый респонс: Код (Text): Hypertext Transfer Protocol HTTP/1.1 302 Found\r\n Request Version: HTTP/1.1 Response Code: 302 Date: Sat, 05 Aug 2006 09:37:33 GMT\r\n Server: 3WservRT 2001, VxWorks 5.4\r\n Set-Cookie: ticket=; path=/; expires=Thu, 16 Oct 2003 09:37:34 GMT; domain=.mail.ru\r\n Set-Cookie: ticket=; path=/; expires=Thu, 16 Oct 2003 09:37:34 GMT; domain=.chat.mail.ru\r\n P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID PSAo PSDo OUR BUS UNI NAV STA INT"\r\n Set-Cookie: MailUser=1; expires=Fri, 03 Nov 2006 09:37:34 GMT; path=/; domain=.mail.ru\r\n Pragma: no-cache\r\n Cache-Control: private\r\n Set-Cookie: Mpop=1154770654:577f475f035b7a7b19050219091d011b0005034f6 a5d5e465e0107041b01027b1f455058665a5e44105a545e591f4642: *******@mail.ru:; path=/; expires=Fri, 03 Nov 2006 09:37:34 GMT; domain=.mail.ru\r\n Set-Cookie: t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAABAAABAAAAAAAAAAAAAAEBvAcA; path=/; expires=Thu, 01 Feb 2007 09:37:34 GMT; domain=.mail.ru\r\n Location: http://my.chat.mail.ru/cgi-bin/checkcookie?id=577f475f035b7a7b1905 0219091d011b0005034f6a5d5e465e0107041b01027b1f455058665a5e4 4105a545e591f4642&user=*******&domain=mail.ru&page=http%3a% 2f%2fchat.mail.ru%2f%3fmra%3d%26roomleft%3d%2 Connection: close\r\n Transfer-Encoding: chunked\r\n Content-Type: text/html\r\n \r\n Он очищает две устаревшие куки и ставит куки для домена mail.ru: Код (Text): Set-Cookie: ticket=; path=/; expires=Thu, 16 Oct 2003 09:37:34 GMT; domain=.mail.ru\r\n Set-Cookie: ticket=; path=/; expires=Thu, 16 Oct 2003 09:37:34 GMT; domain=.chat.mail.ru\r\n Set-Cookie: MailUser=1; expires=Fri, 03 Nov 2006 09:37:34 GMT; path=/; domain=.mail.ru\r\n Set-Cookie: Mpop=1154770654:577f475f035b7a7b19050219091d011b0005034f6 a5d5e465e0107041b01027b1f455058665a5e44105a545e591f4642: *******@mail.ru:; path=/; expires=Fri, 03 Nov 2006 09:37:34 GMT; domain=.mail.ru\r\n Set-Cookie: t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAABAAABAAAAAAAAAAAAAAEBvAcA; path=/; expires=Thu, 01 Feb 2007 09:37:34 GMT; domain=.mail.ru\r\n И делает перенаправление на checkcookie: Код (Text): Location: http://my.chat.mail.ru/cgi-bin/checkcookie?id=577f475f035b7a7b1905 0219091d011b0005034f6a5d5e465e0107041b01027b1f455058665a5e4 4105a545e591f4642&user=*******&domain=mail.ru&page=http%3a% 2f%2fchat.mail.ru%2f%3fmra%3d%26roomleft%3d%2 Браузер открывает новый урл, посылая туда эти куки Код (Text): Cookie: MailUser=1; Mpop=1154770654:577f475f035b7a7b1905021 9091d011b0005034f6a5d5e465e0107041b01027b1f455058665a5e4410 5a545e591f4642:*******@mail.ru:; t=obLD1AAAAAAIAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAA AAAAAAAAEBvA и получает второй респонс, в котором нет установок кук: Код (Text): Hypertext Transfer Protocol HTTP/1.1 302 Found\r\n Request Version: HTTP/1.1 Response Code: 302 Date: Sat, 05 Aug 2006 09:37:34 GMT\r\n Server: 3WservRT 2001, VxWorks 5.4\r\n Location: http://chat.mail.ru/?mra=&roomleft=&nick=%d8%e5%eb %f3%e4%e8%e2%fb%e9_%ca%ee%f2&room=1089056&enter=1812 &signore=%00&mra_status=&textcolor=3&nickcolor=3&silent=%00\r\n Connection: close\r\n Transfer-Encoding: chunked\r\n Content-Type: text/html\r\n \r\n зато в нем есть новое перенапрвяление Код (Text): Location: http://chat.mail.ru/?mra=&roomleft=&nick=%d8%e5%eb %f3%e4%e8%e2%fb%e9_%ca%ee%f2&room=1089056&enter=1812 &signore=%00&mra_status=&textcolor=3&nickcolor=3&silent=%00\r\n И браузер прется по этмоу адресу, отсылая следующие заголовки Код (Text): Hypertext Transfer Protocol GET /?mra=&roomleft=&nick=%d8%e5%eb%f3%e4%e8%e2%fb %e9_%ca%ee%f2&room=1089056&enter=1812&signore=%00& mra_status=&textcolor=3&nickcolor=3&silent=%00 HTTP/1.1\r\n Request Method: GET Request URI: /?mra=&roomleft=&nick=%d8%e5%eb%f3%e4%e8 %e2%fb%e9_%ca%ee%f2&room=1089056&enter=1812&signore= %00&mra_status=&textcolor=3&nickcolor=3&silent=%00 Request Version: HTTP/1.1 Host: chat.mail.ru\r\n User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6\r\n Accept: text/xml,application/xml,application/xhtml+xml,text/html; q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n Accept-Encoding: gzip,deflate\r\n Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n Keep-Alive: 300\r\n Connection: keep-alive\r\n Referer: http://chat.mail.ru/\r\n Cookie: Login=*******; Domain=mail.ru; nick=%u0428%u0435%u0 43B%u0443%u0434%u0438%u0432%u044B%u0439_%u041A%u043E %u0442; nickcolor=3; textcolor=3; room=1089056; silent=0; signore=0; MailUser=1; Mpop=1154770654:577f475f035b7a7b19050219091d011 \r\n Видишь, в конце заголовков устанавливаются куки? Код (Text): Cookie: Login=*******; Domain=mail.ru; nick=%u0428%u0435%u0 43B%u0443%u0434%u0438%u0432%u044B%u0439_%u041A%u043E %u0442; nickcolor=3; textcolor=3; room=1089056; silent=0; signore=0; MailUser=1; Mpop=1154770654:577f475f035b7a7b19050219091d011 \r\n Вопрос: от куда он их взял???? Предпоследний запрос посылал другой набор кук, а в респонсе новые куки не устанавливались. И никаких скриптов, метатгов, фреймов и т.д. Как???
Код (Text): <form method=post action="http://my.chat.mail.ru/cgi-bin/auth" name="form_reg" onSubmit="return valid()"> Код (Text): function valid() { var f = document.form_reg; if (f.Login.value == "") { window.alert("Не заполнено поле email"); return false; } if (f.Password.value == "") { window.alert("Не заполнено поле пароль"); return false; } SetCookie('Login',f.Login.value,exp); SetCookie('Domain',f.Domain.options[f.Domain.selectedIndex].value,exp); if(f.nick.value == "" ) { window.alert("Не заполнено поле ник"); return false; } f.silent.value = f.silent_ch.checked ? 1 : 0; f.signore.value = f.signore_ch.checked ? 1 : 0; saveCookie(); return true; } все устанавливается еще при сабмите формы.
Блин! Вот уж не думал, что функция валидации будет куки устанавливать! Эх!..... Вот что значит шаблонное мышление. И вот что значит правильно подбирать называния для функций. Ну, по крайней мере теперь буду знать хороший способ запутать врага ;-) Большое спасибо, simpson! И большое спасибо всем, кто учавствовал в дискусси!