Connecter compte d'un site en C++

bobcena Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -  
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Comment fait-on pour ouvrir une URL virtuellement, entrer son mot de passe, se connecter et vérifier si ça a marché en C++ ?
Merci.


bobcena
A voir également:

13 réponses

mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Ca dépend de la méthode d'authentification utilisée mais a priori en écrivant dans ton socket la bonne requête ça peut passer. Tu peux regarder ce qui est envoyé avec un navigateur avec des outils comme wireshark. Il suffit ensuite d'écrire la même chose dans le socket avec ton programme C++.

Bonne chance
0
bobcena Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
Merci mamiemando pour ta réponse.
Je vais essayer Wireshark.
Mais quel est le langage de programmation du navigateur ?

bobcena
0
Jeff
 
Quel OS ?
Sous windows, ça se fait facilement avec l'api Win32 (COM) (pas besoin de sockets !)
0
bobcena Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
Sous Windows XP.
T'aurais pas un petit code source ? :o

bobcena
0
Lilian2
 
Pour l'api Windows, demander sur le groupe pro de l'api
https://groups.google.com/forum/?hl=fr#!forum/fr.comp.os.ms-windows.programmation
(c'est très avancé, mais avec l'aide de Msdn, on finit toujours par comprendre les codes postés...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Désolée mais je ne code pas sous windows. Je ne peux pas te dire comment fonctionne l'api windows. Pour ce qui est d'ouvrir des sockets il suffit de chercher sur google "c socket connect" et tu devrais trouver rapidement ton bonheur. Sous wireshark il suffit d'écouter le flux sur l'interface réseau adéquate et de faire clic droit "follow tcp stream" pour voir ce qui est écrit dans le socket.

Bonne chance
0
bobcena Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai trouvé des infos ici :
https://www.commentcamarche.net/contents/1053-les-fonctions-de-l-api-socket
et ici :
https://www.developpez.net/forums/d35253/systemes/reseaux/developpement/c-cpp-socket-server-client/

Mais je ne sais pas trop comment coder ça.
Quelqu'un n'a pas un code source ? ;-)

bobcena
0
Erwan
 
Evite developpez (amateur, nid à bugs)
Il y a plein d'exemples sur MSDN (en C++)
0
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Il y a des milliers d'exemple d'ouverture de socket à trouver sur google...

Concrètement côté client tu remplis un socket avec la fonction socket() et ensuite tu la connectes à un serveur avec la fonction connect().

Côté serveur tu crées un sockaddr_in, tu crées le socket avec la fonction socket(), tu appelles bind pour spécifier sur quelle interface le socket travaille, et tu écoutes le trafic qui arrive sur ce socket avec la fonction listen() et la fonction accept() pour accepter une connexion.
https://fr.wikipedia.org/wiki/Berkeley_sockets

Une fois la connexion établie tu écris dans un socket avec la fonction send() et tu lis avec la fonction recv().

Quand tu as fini, tu fermes le socket avec la fonction close() ou shutdown(). Tout ceci est d'ailleurs très bien expliqué dans la faq...
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
tu crées une socket (on l'appelle sock), tu la connectes sur le serveur (www.commentcamarche.net par exemple), sur le port 80 (pages web)

ensuites, tu envoies le texte suivant:
GET / HTTP1.1\r\n
host: www.commentcamarche.net\r\n
\r\n


et tu lis la réponse renvoyée par le servir (affiches la sur la console)
tu obtiendra une page HTML! (plus les headers http)

ensuite, comme précisé, regardes ce que tu envoies avec wireshark lors de la conenxtion: tu verras ta requette qui contient tes champs login et mots de passe... tu envoies exactement la meme requette au serveur, et tu regardes la réponse, et tu sera "connecté" .
en fait, tu n'est pas connecté. ce qui te conenctera , c'est les cookies qui te serotn renvoyés, que tu devrai joindre à chaque requette...

comme précisé plus haut, l'esponnage de trammes avec wireshark est la clef. j'ai déja fait plusieurs programmes de communication en HTTP grâce à ca
0
Lilian2
 
Comme il a été dit, pas besoin de socket sous Windows. L'api Windows Net fait tout automatiquement
0
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
L'API windows n'est pas forcément plus simple et en plus le code n'est pas portable par pour d'autres OS. Entre appeler 4 fonctions standards qui sont assez claires et largement documentées et les fonctions windows mon choix est assez vite fait...

Parce que bon sans méchanceté aucune si tu ne sais pas remplir une structure sock_addr... et appeler correctement bind, listen et compagnie en prenant un minimum le temps de lire les man ou un tutoriels, ça veut dire que le réseau n'est pas fait pour toi et qu'il faut changer de projet.
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
puis au moins, coder sois même le protocole http permet de le comprendre, de savoir un peu mieu comment les choses se passent dans le navigateur, et de se rendre compte de certaines choses possibles (vol de session par exemple)... utiliser des choses toutes prêtes ca fait gagner du temps, mais ca limite la compréhsension
0
bobcena Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai fait ce code source qui ne marche pas.
Disons que je veuille me connecter à un site comme Comment Ca Marche.net, comment faire ?

#include <stdlib.h>
#include <stdio.h>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <strings.h>
#include <string>
#include <fstream>
#include <windows.h>
#include <shellapi.h>
#include <winsock2.h>

using namespace std;


int main(int nNumberofArgs, char* pszArgs[])
{

int descripteur;
descripteur = socket(AF_INET,SOCK_STREAM,0);

int connect(int socket,struct sockaddr * addr,int * addrlen);

string buffer = "GET / HTTP1.1\r\n"
"host: www.commentcamarche.net\r\n"
"\r\n";

int send(int socket, buffer, int len, 0);

int listen(int socket,int backlog)
std::cout << listen;


system("PAUSE");
return 0;
}



Clarifiez moi ce code source svp ;-)

bobcena


PS : Je suis côté client
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
déja: int connect(int socket,struct sockaddr * addr,int * addrlen);
c'est pas correcte, tu dois passer des parametres préalablement initialisés la dedan ... pas faire des déclarations !

sur cette aprtie la, je suis pas vraiment habitué aux socket C, honte sur moi mais j'utilise toujours les sockets de la MFC (ce qui n'est pas à faire!!!!)...


string buffer = "GET / HTTP1.1\r\n"
"host: www.commentcamarche.net\r\n"
"\r\n";


=>
string buffer = "GET / HTTP1.1\r\nhost: www.commentcamarche.net\r\n\r\n";

0