PDA

Просмотр полной версии : Как залогинится вконтакт через сокет?


_nic
07.12.2008, 20:11
Пытаюсь делать вот так

char *data=new char[1024*1024];
char *acce=new char[1024*1024];
char *par=new char[1024*5];
char host[100]="vkontakte.ru";
char user[100]="";
char pass[100]="";
SOCKET s;char *Ip=new char[150];
SOCKADDR_IN adr;
WSADATA wsd;
WSAStartup(MAKEWORD(2,0),&wsd);
hostent *h;
h=gethostbyname(host);
sprintf(Ip,"%d.%d.%d.%d",(unsigned char)h->h_addr_list[0][0],(unsigned char)h->h_addr_list[0][1],(unsigned char)h->h_addr_list[0][2],(unsigned char)h->h_addr_list[0][3]);
adr.sin_family=AF_INET;
adr.sin_addr.s_addr =inet_addr(Ip);
adr.sin_port = htons(80);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect(s,(sockaddr*)&adr,sizeof(adr));
strcpy(par,"success_url=&fail_url=&try_to_login=1&email=");
strcat(par,user);strcat(par,"&pass=");strcat(par,pass);
strcpy(data,"POST /login.php HTTP/1.1\r\n");
strcat(data,"Accept: */*\r\n");
strcat(data,"Referer: http://vkontakte.ru/login.php?u=1\r\n");
strcat(data,"Accept-Language: ru\r\n");
strcat(data,"Content-Type: text/html\r\n");
strcat(data,"User-Agent: Mozilla/4.0");
strcat(data,"Host: vkontakte.ru\r\n");
strcat(data,"Content-Length: ");strcat(data,AnsiString(strlen(par)).c_str());
strcat(data,"\r\n");strcat(data,"Connection: Keep-Alive\r\n");
strcat(data,"Cache-Control: no-cache\r\n");strcat(data,par);
strcat(data,"\r\nConnection: Close\r\n\r\n");
send(s,data,strlen(data),0);
recv(s,acce,1024*1024,0);

В ответ получаю

HTTP/1.1 400 Bad Request
Server: nginx/0.6.31
Date: Sun, 07 Dec 2008 16:10:38 GMT
Content-Type: text/html
Content-Length: 173
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.6.31</center>
</body>
</html>


Возможно я неправильно составил запрос :( Может кто то подскажет как его правильно составить?

furang
07.12.2008, 20:22
Пост параметры кажется передаются в конце http-запроса после \r\n
то есть
strcpy(par,"success_url=&fail_url=&try_to_login=1&email=");
strcat(par,user);strcat(par,"&pass=");strcat(par,pass);
это в самый конец после
strcat(data,"\r\nConnection: Close\r\n\r\n");
UPD
А еще надо указывать сервер
то есть
POST /login.php HTTP/1.1\r\n
не конает. надо
POST http://vkontakte.ru/login.php HTTP/1.1\r\n

_nic
07.12.2008, 20:30
Пост параметры кажется передаются в конце http-запроса после \r\n
то есть
strcpy(par,"success_url=&fail_url=&try_to_login=1&email=");
strcat(par,user);strcat(par,"&pass=");strcat(par,pass);
это в самый конец после
strcat(data,"\r\nConnection: Close\r\n\r\n");
UPD
А еще надо указывать сервер
то есть
POST /login.php HTTP/1.1\r\n
не конает. надо
POST http://vkontakte.ru/login.php HTTP/1.1\r\n
Тоесть запрос должен выглядеть примерно так

POST /login.php HTTP/1.1
Accept: */*
Referer: http://vkontakte.ru/login.php?u=1
Accept-Language: ru
Content-Type: text/html
User-Agent: Mozilla/4.0Host: vkontakte.ru
Content-Length: 70
Connection: Keep-Alive
Cache-Control: no-cache
Connection: Close
success_url=&fail_url=&try_to_login=1&email=lalala@mail.ru&pass=lalala


?
Все равно "Bad Request" :(

furang
07.12.2008, 20:48
точнее так
POST http://vkontakte.ru/login.php HTTP/1.1
Accept: */*
Referer: http://vkontakte.ru/login.php?u=1
Accept-Language: ru
Content-Type: text/html
User-Agent: Mozilla/4.0
Host: vkontakte.ru
Content-Length: 70
Connection: Keep-Alive
Cache-Control: no-cache
Connection: Close

success_url=&fail_url=&try_to_login=1&email=lalala@mail.ru&pass=lalala

кстати прошу обратить внимание что надо следить за Content-Length. он должен равнятся sizeof(str) где str длина строки с переменными и параметрами. Content-Length должно быть не более (иначе дополнится пробелами) и не менее (иначе не все переменные влезут).
А вобще когда я писал подобные проги на сокетах то делал вот как. ставил naviscope, настраивал браузер на работу через него, делал в браузере что надо, а в naviscope перехватывал пакет и уже на его основании писал проги.

Delimiter
07.12.2008, 21:04
согласен с предыдущим, что нормально писать с сетевым снифером и геморой теоретически предполагая!

[dei]
08.12.2008, 02:18
POST http://vkontakte.ru/login.php HTTP/1.1
Нафига?
Достаточно
POST /login.php HTTP/1.1
...
Host: vkontakte.ru


это ж HTTP/1.1 , учите матчасть.

_nic
08.12.2008, 02:45
Да что так что сяк, всеравно Bad Request

furang
08.12.2008, 03:03
']POST http://vkontakte.ru/login.php HTTP/1.1
Нафига?
Достаточно
POST /login.php HTTP/1.1
...
Host: vkontakte.ru


это ж HTTP/1.1 , учите матчасть.

Работает и так, и так. так с чего шум то подымать? ты выпендрится сюда пришел или человеку помочь?

В конце запроса должно быть \r\n\r\n то есть еще одна пустая строка. не может не работать.

_nic
08.12.2008, 03:27
Незнаю у кого что там работает.Но у меня такой код

char *data=new char[1024*1024];
char *acce=new char[1024*1024];
char *par=new char[1024*5];
char host[100]="vkontakte.ru";
char user[100]="lalalalal@mail.ru";
char pass[100]="lalalala";
SOCKET s;char *Ip=new char[150];
SOCKADDR_IN adr;
WSADATA wsd;
WSAStartup(MAKEWORD(2,0),&wsd);
hostent *h;
h=gethostbyname(host);
sprintf(Ip,"%d.%d.%d.%d",(unsigned char)h->h_addr_list[0][0],(unsigned char)h->h_addr_list[0][1],(unsigned char)h->h_addr_list[0][2],(unsigned char)h->h_addr_list[0][3]);
adr.sin_family=AF_INET;
adr.sin_addr.s_addr =inet_addr(Ip);
adr.sin_port = htons(80);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect(s,(sockaddr*)&adr,sizeof(adr));
strcpy(par,"success_url=&fail_url=&try_to_login=1&email=");
strcat(par,user);strcat(par,"&pass=");strcat(par,pass);
strcpy(data,"POST http://vkontakte.ru/login.php HTTP/1.1\r\n");
strcat(data,"Accept: */*\r\n");
strcat(data,"Referer: http://vkontakte.ru/login.php?u=1\r\n");
strcat(data,"Accept-Language: ru\r\n");
strcat(data,"Content-Type: text/html\r\n");
strcat(data,"User-Agent: Mozilla/4.0");
strcat(data,"Host: vkontakte.ru\r\n");
strcat(data,"Content-Length: ");strcat(data,AnsiString(strlen(par)).c_str());
strcat(data,"\r\n");strcat(data,"Connection: Keep-Alive\r\n");
strcat(data,"Cache-Control: no-cache");//strcat(data,par);
strcat(data,"\r\nConnection: Close\r\n\r\n");
strcat(data,par);strcat(data,"\r\n\r\n");
send(s,data,strlen(data),0);
recv(s,acce,1024*1024,0);
Memo1->Text=AnsiString(acce);
В ответ получает только HTTP/1.1 400 Bad Request :(

furang
08.12.2008, 03:56
Видишь ли в чем дело. То у тебя Connection: Keep-Alive, то Connection: Close. и это в одном запросе.....
Ок. чтоб ты и дальше не мучался специально выкладываю шаблон запроса, который браузер шлет контакту)))


POST http://vkontakte.ru/login.php HTTP/1.0
User-Agent: Opera/9.62 (Windows NT 5.1; U; ru) Presto/2.1.1
Host: vkontakte.ru
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://vkontakte.ru/index.php
Proxy-Connection: Keep-Alive
Content-Length: 38
Content-Type: application/x-www-form-urlencoded

email=<email>&pass=<pass>

bons
08.12.2008, 04:00
я бы посоветовал изменить эту строчку:
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0

видите ли вконтакте любит в gzip отдавать странички, а кому их хочется еще потом распаковывать...

_Kris_
08.12.2008, 12:22
https://forum.antichat.ru/threadnav69514-2-10.html

смотрим тут, и составляем правильный запрос.

_nic
08.12.2008, 17:17
Видишь ли в чем дело. То у тебя Connection: Keep-Alive, то Connection: Close. и это в одном запросе.....
Ок. чтоб ты и дальше не мучался специально выкладываю шаблон запроса, который браузер шлет контакту)))


POST http://vkontakte.ru/login.php HTTP/1.0
User-Agent: Opera/9.62 (Windows NT 5.1; U; ru) Presto/2.1.1
Host: vkontakte.ru
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://vkontakte.ru/index.php
Proxy-Connection: Keep-Alive
Content-Length: 38
Content-Type: application/x-www-form-urlencoded

email=<email>&pass=<pass>


О вот это контакт схавал :)
Только вот мне ещё коеч то интересно почему то когда пароль неправильный в хттп заголовок начинается с "HTTP/1.1 200 OK",а если правильный то "HTTP/1.1 302 Found".Странно как то :confused:

_nic
08.12.2008, 21:27
Хм пароли перестали подходить ко все акам что есть :confused: При попытке входа через браузер ещё и капчу выдает :mad: Это что какая то антибот система?

furang
08.12.2008, 23:14
меняй ИП)))