FORUM D’ENTRAIDE INFORMATIQUE (FEI)
Site d’assistance et de sécurité informatique

Probleme socket requete GET

Règles du forum : Entraide concernant la programmation informatique en général, tous langages : recherche ou correction d'un code ou d'une fonction, aide à la réalisation d'un projet...
Pour la programmation web (HTML, CSS, PHP, MySQL...), il est conseillé de s'orienter dans le forum Webmastering.
Merci de lire et de respecter la charte générale du forum.

Répondre

Afin d’empêcher la création automatisée de comptes, nous vous demandons de réussir le défi ci-contre.
Smileys
:D :) :-) ;) :| :( :cry: :cheers: :hourra: :mv: :lol: :mdr: :bonjour: :hello: :jap: :siffle: :bisou: :P :o :x :roll: :good: :bad: :super: :reflexion: :suspect: :? :oops: :peur: :zen: :boude: :bug:

Revue du sujet : Probleme socket requete GET Étendre la vue

Probleme socket requete GET

par 0cTeT » lun. 17 nov. 2014 12:25
Bonjour, Je travaille sur un petit projet aves les sockets windows pour valider une épreuve du site newbiecontest.org (la premiere epreuve, renvoi). Le but est de récupérer un nombre sur la page prog1.php et de renvoyer ce nombre a la page verifpr1.php sous la forme verifpr1.php?solution=nombre. Voici mon code:

code#include stdio.h
#include stdlib.h
#include winsock2.h
#include string.h
#define PORT  80

void init()
{
   WSADATA wsa;
   int error = WSAStartup(MAKEWORD(2,0),wsa);
   if (error 0)
   {
       puts("WSAStartup failed !");
       exit(EXIT_FAILURE);
   }
}
void clean()
{
   WSACleanup();
}

int main()
{
   int i;
   init();
   SOCKET sock = socket(AF_INET, SOCK_STREAM,0);
   char buffer[9999]= "", *nombre = NULL, perfect[]="";
   struct sockaddr_in sin = {0};
   struct hostent *hostinfo = NULL;

   if(sock == INVALID_SOCKET)
   {
       perror("socket()");
       exit(errno);
   }

  hostinfo = gethostbyname("www.newbiecontest.org");
  sin.sin_addr = *(IN_ADDR*) hostinfo-h_addr;
  sin.sin_port = htons(PORT);
  sin.sin_family = AF_INET;

  if(connect(sock,(SOCKADDR *)sin, sizeof(SOCKADDR))== SOCKET_ERROR)
  {
      perror("connect()");
      exit(errno);
  }
   printf("connected ! On envoie la requete...");
   if((send(sock, "GET /epreuves/prog/prog1.php HTTP/1.1\r\nHost: www.newbiecontest.org\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nAccept-Encoding: gzip,deflate,sdch\r\nAccept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4\r\nCookie: SMFCookie89=a%3A4%3A%7Bi%3A0%3Bs%3A5%3A%2260433%22%3Bi%3A1%3Bs%3A40%3A%22d2f7cfb9a7f02d3b3ffd559ab91122634d22f98d%22%3Bi%3A2%3Bi%3A1598521102%3Bi%3A3%3Bi%3A0%3B%7D; PHPSESSID=c0f0bcc73ab8597e24ad1110bf908ab9; admin=0\r\nReferer: http://www.newbiecontest.org\r\nUser-Agent:  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.102 Safari/537.36\r\n\r\n",sizeof("GET /epreuves/prog/prog1.php HTTP/1.1\r\nHost: www.newbiecontest.org\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nAccept-Encoding: gzip,deflate,sdch\r\nAccept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4\r\nCookie: SMFCookie89=a%3A4%3A%7Bi%3A0%3Bs%3A5%3A%2260433%22%3Bi%3A1%3Bs%3A40%3A%22d2f7cfb9a7f02d3b3ffd559ab91122634d22f98d%22%3Bi%3A2%3Bi%3A1598521102%3Bi%3A3%3Bi%3A0%3B%7D; PHPSESSID=c0f0bcc73ab8597e24ad1110bf908ab9; admin=0\r\nReferer: http://www.newbiecontest.org\r\nUser-Agent:  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.102 Safari/537.36\r\n\r\n"),0 )) == -1)
   {
       printf("\npas de send...");
   }
   recv(sock,buffer,9999,0);
   printf("\n\n %s",buffer);
   nombre = strrchr(buffer, ':');
   printf("\n\nnombre : %s",nombre);
   for(i=2;nombre!= ' ';i++)
   {

   perfect[i-2]=nombre;

   }
   printf("\n\n\n perfect :%s",perfect);
   char reponse1[]="GET /epreuves/prog/verifpr1.php?solution=";
   char reponse2[]=" HTTP/1.1\r\nHost: www.newbiecontest.org\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nAccept-Encoding: gzip,deflate,sdch\r\nAccept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4\r\nCookie: SMFCookie89=a%3A4%3A%7Bi%3A0%3Bs%3A5%3A%2260433%22%3Bi%3A1%3Bs%3A40%3A%22d2f7cfb9a7f02d3b3ffd559ab91122634d22f98d%22%3Bi%3A2%3Bi%3A1598521102%3Bi%3A3%3Bi%3A0%3B%7D; PHPSESSID=c0f0bcc73ab8597e24ad1110bf908ab9\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.102 Safari/537.36\r\nX-DevTools-Emulate-Network-Conditions-Client-Id: 19978059-39A4-4C97-AE6E-EF9D4C00626A\r\n\r\n";
   strcat(reponse1,perfect);
   strcat(reponse1,reponse2);
   if((send(sock,reponse1,strlen(reponse1),0)) !=-1)
   {
       printf("\n\ndeuxieme requete envoyee...");
   }
   char validation[2000]="";
   recv(sock,validation,2000,0);
   printf("\n\n\n %s",validation);
   printf("\n\n\n %s",reponse1);
   closesocket(sock);
  clean();


   return 0;
}
/code

Pour les entetes http, celles que j'envoie j'ai choisit d'utiliser les memes que celles que chrome envoie. Lors de ma premiere requete GET, le serveur me repond, et je peux lire dans buffer la reponse : HTTP/1.1 200 OK ... (entetes) puis la phrase "Le nombre aléatoire pour valider ta reponse est: **** . Donc pour l'instant tout va bien. Je traite buffer et stocke le nombre dans perfect.
Or lors de ma deuxieme requete GET (GET /epreuves/prog/verifpr1.php?solution=valeurdeperfect...), validation , la chaine qui recoit la reponse du serveur contient :

"?xml version="1.0" ...
!DOCTYPE html PUBLIC ....
head
title ....
Bref le code source d'une page de newbiecontest, mais en aucun comme au premier GET.
Il n'y a pas HTTP/1.1 200 OK, il n'y a pas d'entetes, juste le code de la page (je ne sais meme pas laquelle c'est).

Merci de m'aider !
Fenêtre Taskend.exe

Bonjour 4Go de RAM c' est un peu juste, vous p[…]

Voulez-vous dire que vous souhaitez supprimer votr[…]

:bonjour: un peu de lecture https://forum.pcas[…]

TOUR BÀ NÀ HILLS 2 NGÀY 1 Đ&E[…]