IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Winsock, proxy http et getaddrinfo


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par d�faut Winsock, proxy http et getaddrinfo
    Bonjour � tous !

    J'ai quelques questions concernant un proxy http que je fais avec winsock.

    Pour le moment, quand je tappe www.developpez.com dans Firefox, j'arrive � effectuer la communication entre firefox et le proxy et � r�cup�rer la requete http. Pour le moment, je ne fais que l'afficher � l'�cran.

    La prochaine �tape o� je bloque un peu est maintenant le traitement de cette requ�te.

    Pour le moment, la requete est stock�e dans un buffer:
    recv(socketClient,buffer,1515,0);

    1) Y a t-il moyen d'utiliser une fonction pr�d�finie pour analyser le buffer et m'en sortir le HOST ou bien faut-il analyser le buffer "� la main" ?

    2) Concernant la connexion au host, j'utilise un exemple du site de msdn:
    erreur = getaddrinfo(ip, port, &aiHints, &aiList);

    le probl�me est la compr�hension de ces champs:
    a) ip est le host que j'ai r�cup�r�

    b) port est un port au hasard ( la requete HTTP pr�cise t-elle un port que je dois r�cup�rer ? )

    c) aiHints et aiList je ne comprend toujours pas ce que c'est... serait-ce mes sockets Client et Serveur ?


    Comment r�cup�rer le sockaddr_in qui est n�cessaire pour la fonction connect qui sera utilis�e ensuite ?


    Merci � tous !

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    Salut,

    malgr� mes connaissances limit�es je peux t'apporter quelques r�ponses:

    *le port pour les requ�tes http est toujours 80,
    *la fonction perror(char*) permet d'afficher l'erreur si c'est une erreur de connexion avec le serveur.

    De plus la fonction getaddrinfo est d�taill�e: http://msdn2.microsoft.com/en-us/library/ms738520.aspx

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par d�faut
    ok merci pour le port.

    Pour la doc, je l'avais d�j� trouv�e comme mentionn� plus haut mais j'ai quand m�me besoin d'aide (cf question 2)

    @+

  4. #4
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    par exemple, lors de la connection � developpez.com (si je suis la doc):

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    addrinfo *infos=NULL;
    int err;
     
    err = getaddrinfo("www.developpez.com", "80", NULL, &infos);
    Maintenant tu as toutes les infos dans "infos", qui est une chaine de structures addrinfo.

    si tu veux acc�der l'�l�ment suivant de la chaine, il faut appeler infos->ai_next.

    Cependant je n'ai pas compris � quoi te servait cette fonction. Peut �tre as-tu besoin de la structure infos plus tard?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par d�faut
    Bonjour et merci de l'aide.

    Pour reprendre ton exemple, voici ce que j'ai :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    struct addrinfo *infos= NULL;
    int err;
    char bufferHost[65535];
     
    (le bufferHost contient :  www.developpez.com\r\n\0 )
     
    err = getaddrinfo(bufferHost, "80", NULL, &infos);
     
    cout<<"Resultat :"<<infos<<endl;
    cout<<"Contenu :"<<infos->ai_addr<<end;
    et le r�sultat affich� est :
    0x5a03b8
    0x5a0320


    Si on converti ces nombres de l'hexa en d�cimal, on ne trouve pas l'adresse IP de developpez.com donc je vois pas ce que j'ai loup� ?

  6. #6
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    lis bien la doc:

    ai_addr

    A pointer to a sockaddr structure. The ai_addr member in each returned addrinfo structure points to a filled-in socket address structure. The length, in bytes, of each returned addrinfo structure is specified in the ai_addrlen member
    ai_addr est lui m�me un pointeur sur une struct sockaddr.

    Pour r�cup�rer l'IP, je verrais quelque chose comme �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    inet_ntoa(infos->ai_addr->sa_data)
    ou
    Apr�s je peux rien dire vu que je suis pas sous windows. Par contre il y a un exemple dans la doc pour r�cup�rer l'IP d'un serveur:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    // Declare variables
    hostent* Host;
    char* IP;
     
    // Get the local host information
    Host = gethostbyname("www.developpez.net");
    IP = inet_ntoa (*(struct in_addr *)*Host->h_addr_list);

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par d�faut
    salut et encore merci !

    cout<< inet_ntoa(infos->ai_addr->sa_data)
    est refus� par le compilateur

    et
    cout<<infos->ai_addr->sa_data
    donne une chaine vide....


    Quand � gethostbyname, �a devient redondant si j'utilise getaddrinfo je pense. Et getaddrinfo est cens� retourner direct une variable r�utilisable dans le connect donc j'y tient...

    merci
    @+

  8. #8
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    J'ai vraiment regard� sur internet, tout le monde dit d'utiliser getaddrinfo, mais tout le monde utilise gethostbyname...

    voil� la meilleure doc que j'ai trouv�: http://pwet.fr/man/linux/fonctions_b...es/getaddrinfo

    J'abandonne l�, je peux rien faire

    Bonne chance..

Discussions similaires

  1. Recherche code source d'un proxy HTTP
    Par david_chardonnet dans le forum Delphi
    R�ponses: 1
    Dernier message: 07/10/2006, 10h13
  2. Passer un proxy HTTP - Tunelling
    Par Celelibi dans le forum R�seau
    R�ponses: 17
    Dernier message: 05/10/2006, 23h53
  3. HttpInvoke et proxy Http
    Par Sylvain James dans le forum XMLRAD
    R�ponses: 2
    Dernier message: 03/10/2006, 15h02
  4. proxy http (s?)+ ftp autoris�, comment utiliser telnet ou ssh?
    Par TabrisLeFol dans le forum Applications
    R�ponses: 7
    Dernier message: 12/07/2006, 14h58
  5. R�ponses: 3
    Dernier message: 18/04/2006, 22h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo