• STATISTIQUES
  • Il y a eu un total de 2 membres et 14243 visiteurs sur le site dans les dernières 24h pour un total de 14 245 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 832
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Big-Daddy
    Big-Daddy est site internet communautaire avec un effectif diversifié, y compris des artistes, des programmeur...
    Hacking
    [EN] Bright Shadows
    JavaScript: 13, Exploit: 27, Crypto: 69, CrackIt: 52, Stegano: 67, Flash: 3, Programming: 16, Java-Applet: 10, Logic: 20...
    Challenges
    [EN] HackQuest
    Logic: 12, JavaScript: 14, Applet: 6, CrackIt: 13, Crypto: 11, Internet: 3, Exploit: 7, Stegano: 12, Flash: 1, Programmi...
    Challenges
    [EN] Gekko
    Site de challenge présenter sous la forme d'une quête. Vous êtes un agent secret qui répond sous le nom...
    Challenges
    [EN] PHPFreaks
    PHPFreaks est un site dédié à l'apprentissage et l'enseignement du PHP. Ici vous trouver...
    Programmation
    [FR] Zmaster
    Articles sur l'informatique, le hacking, le P2P, les divx, les astuces windows XP, les GSM, Emule, la cryptograph...
    Hacking
    [EN] Security Traps
    Site de challenge qui prétend être construit non pas dans le but de parfaire vos connaissances, mais plutôt dan...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C++] Requéte http
02-11-2012, 09h56 (Modification du message : 19-11-2012, 19h24 par InstinctHack.)
Message : #1
oxame Hors ligne
Newbie
*



Messages : 17
Sujets : 3
Points: 0
Inscription : Jun 2012
[C++] Requéte http
Bonjour,

J'ai un petit souci et j'aurais besoin d'un regard extérieur pour trouvez mon erreur,
Je me suis lancé dans la programmation (c++) réseaux

J'ai commencé par codé une classe gèrent les Sockets, puis j'ai crée une classe gèrent le protocole IRC et la je me lance dans une classe gèrent le protocole HTTP aparament le serveur reconnais correctement la requête mais je n'arrive a récupéré la page a proprement parlé j’obtiens :

HTTP/1.1 200 OK
Date: Fri, 02 Nov 2012 07:38:38 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: NID=65=Sv1539rRDdfH-y4HOeOyd8l7oLZMJvt_2lm1aM6nAEN1Pm1PzHW-dICfdvBsW
QyE07b-J-dNw9uggh2pGUxkNfUrvGO2VPBCwNHW-MwGoclECJ3w7drY3ApMznNZMDLG; expires=Sat
, 04-May-2013 07:38:38 GMT; path=/; domain=.; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bi
n/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked


voila le code :

classe socket

mysock.h

Code :
#ifndef DEF_MYSOCK
#define DEF_MYSOCK

#include <iostream>
#include <String>
typedef int socklen_t;
#include <winsock2.h>

//#pragma comment(lib,"Ws2_32.lib")


class mysock {

    public:
        mysock(const char* dest, int port);
        virtual ~mysock();
        std::string communication(std::string donne);
        void senddonne(std::string donne);
        std::string ecoute();

    protected:
        int initialisation();
        int opensock();
        int etablisement();
        int closesession();
        int liberationsock();
        int liberationwinsowk();
        int recevoirdonne();
        int envoiedonne(std::string donne);


    private:

        int m_port;
        const char* m_dest;
        char buffer[65535];
        std::string* retdonne;
        WSADATA WSAData;
        SOCKET sock;
        SOCKADDR_IN sin;
};

#endif

mysock.cpp

Code :
#include "mysock.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

mysock::mysock(const char* dest, int port)
{
    m_dest = dest;
    m_port = port;

    try
    {
        if(initialisation() != 0)
        {
            throw std::string("Erreur Initialisation !\n");
        }

        sock = opensock();
        if(sock == INVALID_SOCKET)
        {
            throw std::string("Socket invalid");
        }

        if(etablisement() == SOCKET_ERROR)
        {
            throw std::string("Impossible de se connecté");
        }
    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }

}

mysock::~mysock()
{
    try
    {
        if(closesession() != 0)
        {
            throw std::string("Impossible de fermer la socket");
        }

        if(liberationsock() != 0)
        {
            throw std::string("Impossible de liberer la socket !\n");
        }

        if(liberationwinsowk() != 0)
        {
            throw std::string("Impossible de liberer winsock !\n");
        }

    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }
}

std::string mysock::communication(std::string  donne)
{
    try
    {
        if(envoiedonne(donne) == SOCKET_ERROR)
        {
            throw std::string("Erreur envoye donne !\n");
        }
        strcpy(buffer, "" );
        if(recevoirdonne() == SOCKET_ERROR)
        {
            throw std::string("Erreur reception donne !\n");
        }

    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }
    return buffer;
}

std::string mysock::ecoute()
{
    try
    {
        strcpy(buffer, "" );
        if(mysock::recevoirdonne() == SOCKET_ERROR)
        {
            throw std::string("Erreur reception donne !\n");
        }

    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }
    return buffer;
}

void mysock::senddonne(std::string donne)
{

    try
    {
        if(mysock::envoiedonne(donne) == SOCKET_ERROR)
        {
            throw std::string("Erreur reception donne !\n");
        }

    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }
    donne.clear();
}

int mysock::initialisation()
{
    return WSAStartup(MAKEWORD(2,2), &WSAData);
}

int mysock::opensock()
{
    return socket(AF_INET, SOCK_STREAM, 0);
}

int mysock::etablisement()
{
    sin.sin_addr.s_addr = inet_addr(m_dest);
    sin.sin_family = AF_INET;
    sin.sin_port = htons(m_port);
    return connect(sock, (SOCKADDR*)&sin, sizeof(sin));
}

int mysock::closesession()
{
    return shutdown(sock,2);
}

int mysock::liberationsock()
{
    return closesocket(sock);
}

int mysock::liberationwinsowk()
{
    return WSACleanup();
}

int mysock::recevoirdonne()
{
    memset(buffer,0,sizeof(buffer));
    return recv(sock, buffer, sizeof(buffer), 0);
}

int mysock::envoiedonne(std::string donne)
{
    return send(sock,donne.c_str(), donne.size(),0);
}

classe http

http.h

Code :
#ifndef DEF_HTTP
#define DEF_HTTP

#include "mysock.h"

class http {

    public:
        http(const char* url);
        virtual ~http();
        std::string get(const char* page);

    protected:
        std::string header(const char* head_page, int en_tete);
        std::string host();
        std::string user_agent();
        std::string Accept();
        std::string Accept_language();
        std::string Accept_encoding();

    private:
        int http_port;
        std::string _url;
        std::string _host;
        std::string cr;
        std::string lf;
        mysock::mysock *chausette;
};

#endif

http.cpp

Code :
#include "http.h"


http::http(const char* url) : http_port(80), _url(url)
{
    cr = 0x0d;
    lf = 0x0a;
    chausette = new mysock(url, http_port);
}

http::~http()
{
    delete chausette;
}

std::string http::get(const char* page)
{
  /*  chausette->senddonne(http::header(page,0));
    std::string buf, rep;

    do
    {
        buf.clear();
        buf = chausette->ecoute();
        rep += buf;
    }while(buf != "");

    return rep;
    */
    return chausette->communication(http::header(page,0));
}

std::string http::header(const char* head_page, int en_tete)
{
    std::string requete;


    if(en_tete == 0)
    {
        requete += "GET ";
        requete += head_page;
        requete += " HTTP/1.1";
        requete += cr + lf;
    }


    requete += host();
    requete += user_agent();
    requete += Accept();
    requete += Accept_language();
    requete += Accept_encoding();

    return requete + cr + lf;
}

std::string http::host()
{
    return "Host: " + _url + cr + lf;
}

std::string http::user_agent()
{
    return "User-Agent: Ox Agent" + cr + lf;
}

std::string http::Accept()
{
    return "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" +  cr + lf;
}

std::string http::Accept_language()
{
    return "Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" +  cr + lf;
}

std::string http::Accept_encoding()
{
    return "Accept-Encoding: gzip, deflate" +  cr + lf;
}

le main

Code :
#include <iostream>
#include "http.h"

using namespace std;

int main()
{
    http tar("173.194.35.183");
    std::string tmp = tar.get("/index.html");
    cout << tmp;

    return 0;
}

Peux être que quelqu'un vas voir l’erreur énorme qui se cache soit dans le code ou dans l'interprétation du protocol.

Merci d'avance.

Oxame
+1 (0) -1 (0) Répondre
02-11-2012, 12h10
Message : #2
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
Points: 96
Inscription : Apr 2012
RE: requéte http
Regarde : http://support.google.com/accounts/bin/a...wer=151657
Je pense que tu fais un truc qui va pas avec P3P ou ton cookie mais je ne saurai te dire quoi ^^'
+1 (0) -1 (0) Répondre
02-11-2012, 18h52
Message : #3
Dobry Hors ligne
Tueur de lamouz
*



Messages : 206
Sujets : 25
Points: 73
Inscription : Aug 2011
RE: requéte http
Je n'ai pas eu le temps de regarder ton code (et je n'ai jamais utilisé les sockets sur windows), mais si tu veux, j'ai fait une classe similaire que tu peux retrouver https://github.com/necromoine/libSimpleW...socket-src (c'est loin d'être parfait mais c'est fonctionnel).
Je regarderai ton problème plus précisement en début de semaine prochaine si tu n'as pas trouvé de solutions entre temps !
Aestuārium Erudītiōnis

There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
+1 (0) -1 (0) Répondre
02-11-2012, 20h28
Message : #4
oxame Hors ligne
Newbie
*



Messages : 17
Sujets : 3
Points: 0
Inscription : Jun 2012
RE: requéte http
@swissky : oui c'est parc-que je n'est pas encore implémenté la gestion des cookie;

@exOns : merci du partage,

bon j'ai trouvez je ne laissai pas m'a socket en écoute assez longtemps, comme quoi un bonne journée de boulot sa vous éclairci les idée.
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [C] Un mini-serveur HTTP -Moloch- 11 3,327 19-04-2013, 14h22
Dernier message: notfound
  [C++] LibSimpleWeb, des requetes HTTP simples Dobry 0 859 29-03-2012, 14h56
Dernier message: Dobry

Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut