Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Авторизация на сайте с помощью c++ (https://forum.antichat.xyz/showthread.php?t=102190)

Kraneg 20.01.2009 11:31

Авторизация на сайте с помощью c++
 
Пытаюсь авторизоваться с помощью си++ на сайте... Начну как бы с того что если запрос для авторизации я должен посылать такой:
Код:

POST /index.php HTTP/1.1
User-Agent: Opera/10.00 (Windows NT 6.0; U; en) Presto/2.2.0
Host: test2.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Language: ru-RU,ru;q=0.9,en
Accept-Charset: iso-8859-1, utf-8, utf-16, *
Accept-Encoding: deflate, gzip, x-gzip, identity, *
Referer: http://test2.ru/
Proxy-Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 74
referer=%2F&action=dologin&username=123&password=123

то если так и посылать то будет жаловаться на строчку
referer=2F&action=dologin&username=123&password=12 3 и в ответ куки не придут...
а если менять первую строчку на
POST /index.php?action=dologin&username=123&password=123 HTTP/1.1\n
и referer удалить то все пройдет норм и в ответ придет странчка из которой уже можно выцепить кукисы.... =) Так вот в чем вопрос так и надо или я вообще все не правильно делаю? И еще не мог бы кто ни будь привести примеры авторизации с помощью си на сайте... Просто именно с этим столкнулся впервые и что то не допонимаю...


p.s. мой код не до конца доделанный...
Код:

#include "stdafx.h"
#include "winsock2.h"
#include <stdio.h>
#include <fstream>
#include <string.h>
#pragma comment(lib, "WSOCK32.lib")

using namespace std;

//функция вывода ответа сервера в файл
int recvtofile(char recvbuf[99999])
{
        ofstream outfile;
        outfile.open("recv_log.txt");
        outfile.write(recvbuf,strlen(recvbuf));
        return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    WSADATA wsaData;

    if(WSAStartup(MAKEWORD(2,2), &wsaData) != NO_ERROR)
    {
        printf("Error at WSAStartup()\n");

        getchar();
        return 0;
    }

    SOCKET ConnectSocket;

    ConnectSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(ConnectSocket == INVALID_SOCKET)
    {
        printf("Error at socket(): %ld\n", WSAGetLastError());
        WSACleanup();

        getchar();
        return 0;
    }

    sockaddr_in clientService;

    clientService.sin_family = AF_INET;
    clientService.sin_addr.s_addr = inet_addr("127.0.0.1");
    clientService.sin_port = htons(80);

    if(connect(ConnectSocket, (SOCKADDR*)&clientService, sizeof(clientService)) == SOCKET_ERROR)
    {
        printf("Failed to connect.\n");
        WSACleanup();

        getchar();
        return 0;
    }
        else
        {
                printf("Conect to server... OK! \n");
        }

    int bytesSent;
    int bytesRecv = 0;
    char sendbuf1[] =
                                "POST /index.php?action=dologin&username=123&password=123 HTTP/1.1\n"
                                "User-Agent: Opera/10.00 (Windows NT 6.0; U; en) Presto/2.2.0\n"
                                "Host: test2.ru\n"
                                "Proxy-Connection: Keep-Alive\n"
                                "\n";
    char recvbuf[99999] = "";
        bytesSent = send(ConnectSocket, sendbuf1, strlen(sendbuf1), 0);
    printf("Bytes Sent: %ld\n", bytesSent);
    bytesRecv = recv(ConnectSocket, recvbuf, 99999, 0);
    printf( "Bytes Recv: %ld\n", bytesRecv );


    closesocket(ConnectSocket);
    WSACleanup();

    getchar();

    return 0;
}

после этого в recvbuf можно выцепить те самые куки... Вопрос правильно ли?


Неужели никто не знает ответ? =\

dnd 20.01.2009 15:04

после Content-Length надо вроде строчку проспускать (\n\n)
Можешь через WinInet делать - тогда даже выцеплять куки не надо будет - они сами приделаются и при следущем запросе к сайту ты уже будешь авторизован

groundhog 20.01.2009 15:09

Совершенно верно

Код:

POST /index.php HTTP/1.1
User-Agent: Opera/10.00 (Windows NT 6.0; U; en) Presto/2.2.0
Host: test2.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Language: ru-RU,ru;q=0.9,en
Accept-Charset: iso-8859-1, utf-8, utf-16, *
Accept-Encoding: deflate, gzip, x-gzip, identity, *
Referer: http://test2.ru/
Proxy-Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 74

referer=%2F&action=dologin&username=123&password=123

И необходимо следить за тем, чтобы Content-Length был равен длине тела пост-запроса (включая и непечатные символы).

Цитата:

...и referer удалить то все пройдет норм и в ответ придет странчка из которой уже можно выцепить кукисы...
У меня такое впечатление, что ты не знаешь что такое кукисы и где они передаются... При чём тут "выцеплять из странички"? Кукисы передаются в заголовке ответа в поле Set-Cookie...


Время: 11:42