Как залогинится вконтакт через сокет?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 7 Dec 2008.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Пытаюсь делать вот так
    Code:
    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);
    
    В ответ получаю
    Code:
    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>
    
    
    Возможно я неправильно составил запрос :( Может кто то подскажет как его правильно составить?
     
  2. furang

    furang Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Пост параметры кажется передаются в конце http-запроса после \r\n
    то есть
    Code:
    strcpy(par,"success_url=&fail_url=&try_to_login=1&email=");
    strcat(par,user);strcat(par,"&pass=");strcat(par,pass);
    это в самый конец после
    Code:
    strcat(data,"\r\nConnection: Close\r\n\r\n");
    UPD
    А еще надо указывать сервер
    то есть
    Code:
    POST /login.php HTTP/1.1\r\n
    не конает. надо
    Code:
    POST http://vkontakte.ru/login.php HTTP/1.1\r\n
     
    #2 furang, 7 Dec 2008
    Last edited: 7 Dec 2008
  3. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Тоесть запрос должен выглядеть примерно так
    Code:
    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" :(
     
    #3 _nic, 7 Dec 2008
    Last edited: 7 Dec 2008
  4. furang

    furang Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    точнее так
    Code:
    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 перехватывал пакет и уже на его основании писал проги.
     
  5. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    согласен с предыдущим, что нормально писать с сетевым снифером и геморой теоретически предполагая!
     
  6. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    Code:
    POST http://vkontakte.ru/login.php HTTP/1.1
    Нафига?
    Достаточно
    Code:
    POST /login.php HTTP/1.1
    ...
    Host: vkontakte.ru
    
    это ж HTTP/1.1 , учите матчасть.
     
  7. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Да что так что сяк, всеравно Bad Request
     
  8. furang

    furang Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Работает и так, и так. так с чего шум то подымать? ты выпендрится сюда пришел или человеку помочь?

    В конце запроса должно быть \r\n\r\n то есть еще одна пустая строка. не может не работать.
     
    #8 furang, 8 Dec 2008
    Last edited: 8 Dec 2008
  9. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Незнаю у кого что там работает.Но у меня такой код
    Code:
    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 :(
     
  10. furang

    furang Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Видишь ли в чем дело. То у тебя Connection: Keep-Alive, то Connection: Close. и это в одном запросе.....
    Ок. чтоб ты и дальше не мучался специально выкладываю шаблон запроса, который браузер шлет контакту)))

    Code:
    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>
    
    
     
  11. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    я бы посоветовал изменить эту строчку:
    Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0

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

    _Kris_ Elder - Старейшина

    Joined:
    22 Jul 2008
    Messages:
    53
    Likes Received:
    31
    Reputations:
    5
    смотрим тут, и составляем правильный запрос.
     
  13. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    О вот это контакт схавал :)
    Только вот мне ещё коеч то интересно почему то когда пароль неправильный в хттп заголовок начинается с "HTTP/1.1 200 OK",а если правильный то "HTTP/1.1 302 Found".Странно как то :confused:
     
  14. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Хм пароли перестали подходить ко все акам что есть :confused: При попытке входа через браузер ещё и капчу выдает :mad: Это что какая то антибот система?
     
  15. furang

    furang Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    меняй ИП)))