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

Boost C++ Discussion :

Boost.Asio : Récuperer l'IP


Sujet :

Boost C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut Boost.Asio : Récuperer l'IP
    Bonjour à tous et à toutes,
    Mon problème est que j'aimerais récupérer l'adresse ip de l'ordinateur auquel s'exécute le programme. L'ennui c'est que j'ai eu beau chercher partout sur le site de boost et de lire de haut en bas le tutoriel sur asio, je n'ai pas trouvé comment faire

    Je veux récuperer l'adresse ip pour la stocker dans une base de données et comme ca je pourrais faire directement une connexion client - client.
    Si je fais cette architecture réseau, c'est parce que je ne sais pas où je pourrais stocker l'exécutable serveur (d'ailleurs si pouviez m'éclairer sur ce point !) et que ca peut s'avérer rapide !

    Merci d'avance pour vos réponses et vos remarques !

    Edit : Je viens de trouver un code sur internet. Je l'ai adapté et le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    boost::asio::io_service ios;
    	boost::asio::ip::tcp::resolver resolver(ios);	// (1)
     
    	// Paramètrage du resolver sur Developpez.com
    	boost::asio::ip::tcp::resolver::query query(host_name(), "80"); // (2)
     
    	// On récupère une "liste" d'itérateur
    	boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query); // (3)
    	boost::asio::ip::tcp::resolver::iterator end; //Marqueur de fin
    	while (iter != end) // On itère le long des endpoints
    	{
    		boost::asio::ip::tcp::endpoint endpoint = *iter++;
    		std::cout << endpoint << std::endl; // on affiche (4)
    	}
    Il ne me retourne pas l'ip que l'on peut retrouver sur whatismyip mais c'est le même qu'avec ipconfig /all...
    Est ce que c'est le bon ip ?

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Salut,

    Plus pratique, ce sont les fonctions remote_endpoint() et local_endpoint() !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <iostream>
    #include <boost/asio.hpp>
     
     
    int main()
    {	
    	// Création du service principal et du résolveur.
    	boost::asio::io_service ios;
    	boost::asio::ip::tcp::resolver resolver(ios);	// (1)				
     
    	// Paramètrage du resolver sur Developpez.com
    	boost::asio::ip::tcp::resolver::query query("www.developpez.com", "80"); // (2)
     
    	// On récupère une "liste" d'itérateur
    	boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query); // (3)
    	boost::asio::ip::tcp::resolver::iterator end; //Marqueur de fin
     
    	boost::asio::ip::tcp::socket sock(ios);
    	sock.connect(*iter);
     
    	std::cout << sock.local_endpoint() << std::endl;
     
    	return 0;
    }
    L' IP que tu récupères est par contre l' IP locale, à l'intérieur de ton réseau si tu es derrière un routeur.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut
    Et bien en fait, c'est un peu plus compliqué que ca alors mon problème.
    Donc je vais essayer de l'expliquer :

    J'aimerais faire un jeu réseau, mais je n'en n'ai jamais fait...
    Donc je ne sais pas par exemple, où est ce que mon application "serveur" devra se mettre à la fin. Si je peux par exemple le mettre sur un ftp d'un site quelconque (free par exemple ?) et comment je dois faire pour l'exécuter à partir de ce ftp....

    Donc pour palier à ces questions (auxquels je ne connais pas les réponses mais que j'aimerais bien connaître), j'ai pensé stocker une liste des adresses ip sur une base de données (stockée sur freesql.org) et que je récupère avec MySQL++ pour établir ensuite une relation directe client - client (peer-to-peer en gros). L'ennui c'est que je ne sais pas quelle adresse stocker dans la BDD et si au fond cette pratique est vraiment la meilleure !?

    Merci par avance pour votre aide

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par mick009 Voir le message
    J'aimerais faire un jeu réseau, mais je n'en n'ai jamais fait...
    Donc je ne sais pas par exemple, où est ce que mon application "serveur" devra se mettre à la fin. Si je peux par exemple le mettre sur un ftp d'un site quelconque (free par exemple ?) et comment je dois faire pour l'exécuter à partir de ce ftp....
    Tu ne peux pas... Il faut avoir un minimum de droits sur le serveur pour le faire tourner et qu'il soit visible de l'extérieur.
    Citation Envoyé par mick009 Voir le message
    Donc pour palier à ces questions (auxquels je ne connais pas les réponses mais que j'aimerais bien connaître), j'ai pensé stocker une liste des adresses ip sur une base de données (stockée sur freesql.org) et que je récupère avec MySQL++ pour établir ensuite une relation directe client - client (peer-to-peer en gros). L'ennui c'est que je ne sais pas quelle adresse stocker dans la BDD et si au fond cette pratique est vraiment la meilleure !?
    Il faut surtout que ton utilisateur de jeu ait configuré son réseau pour être visible de l'extérieur, et à ce moment, c'est le serveur qui pourra récupérer l'adresse publique. Toi, tu ne la connais pas puisque tu passes par un routeur qui a sa propre adresse (et tu pourrais même imaginer avoir plusieurs accès Internet, et donc plusieurs adresses publiques).

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    ftp est un protocole qui permet d'échanger des fichiers sur un espace prêté ou loué par l'hébergeur du service ftp. Ce n'est en aucun cas un espace qui va te permettre d'exécuter un programme.

    Pour cela, il faut louer un service (une machine virtuelle) auprès d'un fournisseur. Je ne connais pas d'équivalent gratuit (mais si cela existe, je suis intéressé ).

    Autre solution, tu laisses ton PC branché en permanence à ta maison et tu es ton propre hébergeur. Il faudra très certainement modifier la conf de ta box pour que le service que tu veux faire (le jeu) soit visible depuis Internet.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut
    Et donc au final, qu'est-ce que je peux faire ?
    Si j'ai bien compris, il faut que je sorte mon porte-monnaie si je veux pouvoir utiliser une application serveur sans interruption ?

    Est-ce que c'est cette méthode qu'utilise les grands projets, style mmorpg ou d'autre jeux en réseau (style bataille navale : cf http://khayyam.developpez.com/articl...taille-navale/) ?

    Merci d'avance pour vos réponses !

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Eh oui Mais tu peux commencer par faire un serveur chez toi, ça coûte moins cher.

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut
    Et je dois donc oublier mon idée de départ avec stockage des adresses ip ?

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pourquoi ? Non, tu stockes ça sur ta machine, comme si c'était un serveur distant.

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    La seule chose que tu as besoin de voir, c'est l'adresse publique et pour cela, l'info donnée par Boost.Asio avec remote_endpoint() est la bonne.

    Après tout dépend de ton protocole entre le client et le serveur. Si ce protocole est "sale", c'est à dire qu'il ne supporte pas (ou mal) la translation d'adresse (cf §5 de mon tuto Introduction aux réseaux TCP IP pour ma définition d'un protocole sale), effectivement tu seras embêté.

    Mais comme visiblement c'est toi qui définit le protocole de ton jeu, pas de problème, une BDD pour stocker les IP publiques des personnes connectées, cela a un sens.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut
    Bon beh je crois que je peux mettre ce post en résolu
    J'appliquerais ces bons conseils et je garde au final l'idée que j'avais au départ mais avec plus d'idées qu'avant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boost::Asio et Visual C++ Express 2005
    Par TocTocKiéLà? dans le forum Boost
    Réponses: 11
    Dernier message: 30/12/2007, 21h11
  2. socket ssl & boost::asio
    Par kass28 dans le forum Boost
    Réponses: 0
    Dernier message: 16/10/2007, 09h38
  3. Boost::Asio et code::blocks
    Par TocTocKiéLà? dans le forum Boost
    Réponses: 10
    Dernier message: 10/08/2007, 23h20
  4. Boost::asio et openssl
    Par Floréal dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 18/07/2007, 16h17
  5. Boost::asio : multi threading ou pas?
    Par Alp dans le forum Boost
    Réponses: 9
    Dernier message: 02/09/2006, 22h01

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