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

Entraide pour le programmation en général (tous langages).
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.
  • Avatar du membre
Avatar du membre
par 0cTeT
#145140
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 !
Sujet remonté par Anonymous le lun. 17 nov. 2014 12:25.

Ok Que dit virustotal sur le fichier concern&eacu[…]

Bonjour, Je me suis du coup attarder sur ce fame[…]

bachelorarbeit

Hola an alle. Ich bin begeistert von der Zusammena[…]

Cadeaux High-tech

Bien joué :mdr: