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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Вопрос по Си] MRIM авторизация (https://forum.antichat.xyz/showthread.php?t=192573)

f0rward 01.04.2010 20:56

[Вопрос по Си] MRIM авторизация
 
Код:

int mrim_test() {
        SOCKET hSock;
        struct sockaddr_in hAddr;
        char buf[1024], req[256];
        int res;
        struct _MRIM_ADDR mrim_addr;
        struct mrim_packet_header_t cs, sc;

        if((hSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {
                printf("[-] create socket\n");
                return -1;
        }
        printf("[+] create socket\n");
        hAddr.sin_family = AF_INET;
        hAddr.sin_port = htons(MRIM_PORT);
        hAddr.sin_addr.s_addr = inet_addr(MRIM_HOST); // ip mrim.mail.ru
        if(connect(hSock, (struct sockaddr*)&hAddr, sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
                printf("[-] connect 2 mrim.mail.ru:443\n");
                closesocket(hSock);
                return -1;
        }
        printf("[+] connect 2 mrim.mail.ru:443\n");
        sprintf(req, "CONNECT mrim.mail.ru:443 HTTP/1.0\r\n\r\n");
        if(send(hSock, req, strlen(req), 0)==SOCKET_ERROR) {
                printf("[-] send packet 2 mrim.mail.ru:443\n");
                closesocket(hSock);
                return -1;
        }
        printf("[+] send packet 2 mrim.mail.ru:443\n");
        if(recv(hSock, buf, sizeof(buf)-1, 0)==SOCKET_ERROR) {
                printf("[-] recv answer from mrim.mail.ru:443\n");
                closesocket(hSock);
                return -1;
        }
        printf("[+] recv answer from mrim.mail.ru:443\n");
        strtok(buf, "\r\n");
        strtok(buf, ":");
        strcpy(mrim_addr.host, buf);
        mrim_addr.port = atoi(strtok(NULL, ":"));
        printf("[+] get connection server: %s:%d\n", mrim_addr.host, mrim_addr.port);
        printf("\nrecreating socket...\n\n");
        closesocket(hSock);
        hSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if((hSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {
                printf("[-] create socket\n");
                return -1;
        }
        printf("[+] create socket\n");
        hAddr.sin_family = AF_INET;
        hAddr.sin_port = htons(mrim_addr.port);
        hAddr.sin_addr.s_addr = inet_addr(mrim_addr.host);
        if(connect(hSock, (struct sockaddr*)&hAddr, sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
                printf("[-] connect 2 %s:%d\n", mrim_addr.host, mrim_addr.port);
                closesocket(hSock);
                return -1;
        }
        printf("[+] connect 2 %s:%d\n", mrim_addr.host, mrim_addr.port);
        cs.magic = CS_MAGIC;
        cs.proto = PROTO_VERSION;
        cs.msg = MRIM_CS_HELLO;
        if(send(hSock, (unsigned char*)&cs, PACKET_SIZE, 0) == SOCKET_ERROR) {
                printf("[-] send MRIM_CS_HELLO\n");
                closesocket(hSock);
                return -1;
        }
        printf("[+] send MRIM_CS_HELLO\n");
        if (recv(hSock, (char *)&sc, PACKET_SIZE, 0) == SOCKET_ERROR) {        printf("[-] recv MRIM_CS_HELLO\n");
                closesocket(hSock);
                return -1;
        }
        printf((sc.msg == MRIM_CS_HELLO_ACK ? "[+] recv MRIM_CS_HELLO_ACK\n": "[+] recv %d\n"), sc.msg);

        closesocket(hSock);
        return 0;
}

Собственно в выделенном месте серв должен возвращать MRIM_CS_HELLO_ACK на сколько я понимаю, но у меня этого не происходит, скорее всего что-то напутал.
Прошу помощи, нужно дойти до авторизации.

Gar|k 01.04.2010 21:46

2 f0rward
http://forum.antichat.ru/thread170703.html
http://forum.antichat.ru/thread133090.html


Время: 07:32