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

Réseau C Discussion :

Récupérer l'adresse IP avec inet_ntoa


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 277
    Par défaut Récupérer l'adresse IP avec inet_ntoa
    Bonjour,

    Je m'autoforme sur le réseau en C, et je souhaite récupérer l'adresser IP du serveur (dans le code du serveur) et l'afficher.

    Voici ce que je fais :
    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
     
    	int client_socket;
    	struct sockaddr_in mon_address, client_address;
    	socklen_t mon_address_longueur;
     
    	bzero(&mon_address, sizeof(mon_address));
    	mon_address.sin_port = htons(30000);
    	mon_address.sin_family = AF_INET;
    	mon_address.sin_addr.s_addr = htonl(INADDR_ANY);
     
    	//création de socket
    	if((ma_socket=socket(AF_INET, SOCK_STREAM, 0)) == -1){
    		printf("La création a raté");
    		exit(0);
    	}
     
    	//Association de l'adresse locale de protocole à la socket
    	bind(ma_socket, (struct sockaddr*)&mon_address, sizeof(mon_address));
     
    	//Ecoute sur la socket
    	listen(ma_socket, 5);
     
    	char *some_addr;
    	some_addr = inet_ntoa(mon_address.sin_addr); // return the IP
    	printf("%s\n", some_addr);
    Et plus précisément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	char *some_addr;
    	some_addr = inet_ntoa(mon_address.sin_addr); // return the IP
    	printf("%s\n", some_addr);
    Mais l'adresse affichée est 0.0.0.0

    Je ne vois pas où se trouve mon erreur, pourriez-vous m'aider svp ?

    Merci !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Bonjour,

    Ici, tu n'affiches pas l'adresse d'un client qui viendrait de se connecter (laquelle te serait renvoyée par accept, que tu n'utilises pas dans ton exemple) mais celle qui est associée au socket que tu utilises pour te mettre à l'écoute.

    Comme tu es à l'écoute de connexions en provenance de n'importe quelle adresse potentielle, tu utilises à raison la macro INADDR_ANY, laquelle se résout en 0.0.0.0 :

    netinet/in.h :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define	INADDR_ANY		((in_addr_t) 0x00000000)

    Donc, tu obtiens bien « 0.0.0.0 » une fois décodée.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Si tu veux récupérer l'adresse IP de ton poste, la méthode "traditionnelle" était gethostname() + gethostbyname() (suivi éventuellement d'un inet_ntoa() pour l'affichage de l'adresse récupérée). J'ignore s'il y a eu mieux depuis.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Tu ne peux pas connaître ton adresse IP publique uniquement localement. Au mieux ton routeur pourrait la connaitre, à voir s'il fournit une API ou quelque chose pour la récupérer.
    Pour connaître ton IP publique tu as besoin d'un interlocuteur externe qui te la donnera.
    De nombreux sites font ça gratuitement. Le plus simple serait sans doute d'interroger https://ifconfig.me/ip, le résultat semble assez trivial pour être parsé.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. [C#] Récupérer son adresse IP sur Internet
    Par Thomas Lebrun dans le forum Windows Forms
    Réponses: 11
    Dernier message: 28/07/2014, 16h19
  2. [Système] Récupérer l'adresse MAC de la machine
    Par la.musaraigne dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 27/01/2011, 14h08
  3. [MFC]récupérer l'adresse MAC
    Par julien20vt dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h22
  4. Comment récupérer les adresses WWW dans Internet Explorer ?
    Par chaours dans le forum Web & réseau
    Réponses: 7
    Dernier message: 03/09/2003, 14h27
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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