Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Правильные HTTP запросы через Сокеты на С++

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Для начинающих] >> Правильные HTTP запросы через Сокеты на С++
Имя
Сообщение << Старые топики   Новые топики >>
Правильные HTTP запросы через Сокеты на С++ - 2008-10-02 19:46:08.950000   
TGrey[WoLf]

Сообщений: 3
Оценки: 0
Присоединился: 2008-10-02 19:22:30.440000
Здаствуйте, решил вот узнать, что такое сокеты и что с ними делать. Пошарил по интернету нашел статей, почитал, создал код. Но вот теперь интересно стало, как отправить запрос через HHTP протокол. Я играл в одну игру браузерную и у меня там еще есть акк. Так вот мне интересно, как мне залогинится отправив данные через Сокет. Все мои попытки были неудачны. Вот сайт www.haddan.ru как я понимаю данные вводимые на главное страничке отправляются в другой файл, глде происходит их обработка.
Специально для этого я скачал HTTP Analyzator и проследил, что, куда после нажатия кнопки ВОЙТИ. ПОлучил вот такой запрос
quote:

POST /member.php HTTP/1.0
Host: www.haddan.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.13) Gecko/20080311 AdCentriaIM/1.7 Firefox/2.0.0.13
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.haddan.ru/
Content-Type: application/x-www-form-urlencoded
Content-Length: 33

username=USER&amp;passwd=PASS

далее если через ИЕ - логинится, если через фаерфокс - просит зайти в ИЕ.
Всунул я это в код
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;winsock2.h&gt; #include &lt;windows.h&gt; #include &lt;ctype.h&gt; #define PORT 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; Порт, через который идет подключение к серверу....21,80,25,110 и т.п. #define SERVERADDR "77.91.229.20"&nbsp;&nbsp;&nbsp;&nbsp; // Адрес сервера int main ( int argc, char* argv [ ] ) { &nbsp; &nbsp;&nbsp;&nbsp; WSADATA wd; &nbsp; &nbsp;&nbsp;&nbsp; char buff[10000]; &nbsp; &nbsp;&nbsp;&nbsp; char buff2[9000]= { "POST /member.php HTTP/1.0\r\n" "Host: www.haddan.ru\r\n" "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.13) Gecko/20080311 AdCentriaIM/1.7 Firefox/2.0.0.13\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://www.haddan.ru/\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Content-Length: 33\r\n\r\n" "username=USER&amp;passwd=PASS" &nbsp; &nbsp;&nbsp;&nbsp; }; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf ( "TCP Client \n" ); // ну, тут и так понятно &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( WSAStartup ( 0x202, &amp;wd ) ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf ( " WSAStart error&nbsp; %d \n ", WSAGetLastError ( ) ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOCKET sock ; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sock=socket ( AF_INET, SOCK_STREAM, 0 ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; ( sock &lt; 0 ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf (" Socket ( ) error&nbsp;&nbsp;&nbsp; %d \n ", WSAGetLastError ( ) ); &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return&nbsp; -1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sockaddr_in&nbsp; dest_addr; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dest_addr.sin_family=AF_INET; //инет коннектинг &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dest_addr.sin_port=htons ( PORT ); //порт &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HOSTENT&nbsp;&nbsp;&nbsp; *hst;&nbsp; // хост &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( inet_addr(SERVERADDR) != INADDR_NONE )&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dest_addr.sin_addr.S_un.S_addr = inet_addr(SERVERADDR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if( hst=gethostbyname ( SERVERADDR ) )&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ( ( unsigned long&nbsp;&nbsp; * ) &amp;dest_addr.sin_addr )[0]=((unsigned long** )hst-&gt;h_addr_list)[0][0]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf( "invalid address&nbsp; %s \n", SERVERADDR ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket( sock ) ; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WSACleanup(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp; -1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(connect( sock, (sockaddr *)&amp;dest_addr, sizeof(dest_addr) )) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf (" Connect error&nbsp; %d \n ", WSAGetLastError ( ) ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp; &nbsp;&nbsp;&nbsp; //sprintf( buff2, "GET /room/func/mine.php HTTP/1.1\r\nHost: haddan.ru\r\nConnection: Close\r\n\r\n"); &nbsp; &nbsp;&nbsp;&nbsp; send( sock, buff2, sizeof(buff2), 0); &nbsp; &nbsp;&nbsp;&nbsp; recv( sock, buff, sizeof(buff)-1, 0 ); &nbsp; &nbsp;&nbsp;&nbsp; //for(int i=0; i &lt; strlen(buff); i++) &nbsp; &nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; if(isalnum(buff[i]) || buff[i] == '&lt;'|| buff[i] == '&gt;' || buff[i] == '/') &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("%s",buff ); &nbsp; &nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; else &nbsp; &nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; continue; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("\n"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf ("Connection with %s succesfully. quit - quit" , SERVERADDR ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //int nsize; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*while( ( nsize = recv( sock, buff, sizeof(buff)-1, 0 ) ) != SOCKET_ERROR ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buff[ nsize ] =0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf ( " S=&gt;C: %s ", buff&nbsp; ) ; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf ( "S&lt;=C: " ) ; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fgets ( &amp;buff [0], sizeof( buff )-1, stdin ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; ( !strcmp ( &amp;buff[0], "quit\n" ) ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf ( " Exit " ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket ( sock ) ; //выход правильный &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WSACleanup() ; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send ( sock, &amp;buff [ 0 ], nsize, 0 ) ; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //printf ( " Recv error&nbsp; %d \n", WSAGetLastError ( )&nbsp; ); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //closesocket ( sock ) ; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //WSACleanup ( ) ; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0; } В итоге получаю такой результат
quote:

TCP Client
HTTP/1.1 302 Found
Date: Thu, 02 Oct 2008 15:40:08 GMT
Server: Apache/2.0.58 (Unix) PHP/5.1.4
X-Powered-By: PHP/5.1.4
Set-Cookie: PHPSESSID=ct419tcu690bp9hmvq2b4dnt95; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
location: /main.php
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 26
Keep-Alive: timeout=3, max=250
Connection: Keep-Alive
Content-Type: text/html; charset=windows-1251

▼Л
Connection with 77.91.229.20 succesfully. quit - quitPress any key to continue

И если просмотреть принятое содержимое через Анализатор
то там
quote:

‹&nbsp;&nbsp;&nbsp;&nbsp; xњ&nbsp;&nbsp; яя&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HTTP/1.1 414 Request-URI Too Large
Date: Thu, 02 Oct 2008 15:41:59 GMT
Server: Apache/2.0.58 (Unix) PHP/5.1.4
Content-Length: 333
Connection: close
Content-Type: text/html; charset=iso-8859-1

&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"&gt;
&lt;html&gt;&lt;head&gt;
&lt;title&gt;414 Request-URI Too Large&lt;/title&gt;
&lt;/head&gt;&lt;bоdу&gt;
&lt;h1&gt;Request-URI Too Large&lt;/h1&gt;
&lt;p&gt;The requested URL's length exceeds the capacity
limit for this server.&lt;br /&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;address&gt;Apache/2.0.58 (Unix) PHP/5.1.4 Server at haddan.ru Port 80&lt;/address&gt;
&lt;/bоdу&gt;

Меня смущает значение масива запроса(buff) - 9000, но если поставить меньше, то оно долго думает и нет никаких результатов.
Тоесть кроме того, как показать как нужно построить запрос было бы не плохо может подкинуть литературы, где расписано, как, где и что.
Вот такая фигня получается. Спасибо.
Post #: 1
Страниц:  [1]
Все форумы >> [Для начинающих] >> Правильные HTTP запросы через Сокеты на С++







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.