Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2268 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Je n'arrive pas à récupérer mon adresse réseau _externe_

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Je n'arrive pas à récupérer mon adresse réseau _externe_

n°1266025
souliane
Posté le 13-12-2005 à 23:44:31  profilanswer
 

Bonsoir,
 
j'ai un problème pour récupérer mon adresse réseau externe... je n'y arrive pas !
 

  • INADDR_ANY ne convient pas, il écrit 0 dans le sockaddr_in.sin_addr et en récupérant avec inet_ntoa j'obtiens 0.0.0.0
  • gethostbyname nécessite l'entrée d'un paramètre... je veux que tout soit automatique
  • en récupérant le nom de la machine avec gethostname puis en l'envoyant à gethostbyname, j'obtiens l'adresse locale...


Connaissez vous la solution :??:
 
Ce n'est pas pour faire un bind mais pour que de l'extérieur des clients puisse se connecter à la machine à partir de cette adresse. Et la machine serveur n'est pas toujours la même donc je peux pas non plus faire un truc du genre #define HOSTNAME "trucblabla".
 
Merci.

mood
Publicité
Posté le 13-12-2005 à 23:44:31  profilanswer
 

n°1266048
manatane
En vous remerciant, bonsoir
Posté le 14-12-2005 à 00:19:26  profilanswer
 

sous linux on peut utiliser un appel ioctl (SIOCGIFADDR)

Code :
  1. // choppe_ip eth0 par exemple, ce qui renvoie "IP Adress of 'eth0' is '192.168.1.10'" sur ma babasse
  2. #include <stdio.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <sys/socket.h>
  8. #include <sys/types.h>
  9. #include <netinet/in.h>
  10. #include <arpa/inet.h>
  11. #include <sys/ioctl.h>
  12. #include <net/if.h> // struct ifreq
  13. int get_my_extern_ip(const char * interface) {
  14. int test_sock=0;
  15. struct sockaddr_in *addrp = NULL;
  16. struct ifreq ifr;
  17. test_sock = socket( PF_INET, SOCK_DGRAM, 0 );
  18. if( test_sock == -1 ) {
  19.   fprintf( stderr, "Cannot obtain socket :%s\n",strerror(errno));
  20.   return -1;
  21. }
  22. memset( &ifr, 0, sizeof( struct ifreq ) );
  23. strncpy( ifr.ifr_name, interface, IFNAMSIZ);
  24. // on obtient l'adresse de l'adresse l'interface via SIOCGIADDR
  25. if( ioctl( test_sock, SIOCGIFADDR, &ifr ) == -1 ) {
  26.   fprintf( stderr, "Cannot obtain IP address of '%s': %s\n",interface,strerror(errno));
  27.   close(test_sock);
  28.   return -1;
  29. }
  30. close(test_sock);
  31. addrp = (struct sockaddr_in *)&(ifr.ifr_addr);
  32. fprintf(stdout, "IP Adress of '%s' is '%s'\n",interface,inet_ntoa(addrp->sin_addr));
  33. return 0;
  34. }
  35. int main( int argc, char ** argv ) {
  36.   get_my_extern_ip( argv[1] );
  37.   return 0;
  38. }


 
 

n°1266056
souliane
Posté le 14-12-2005 à 00:29:03  profilanswer
 

Merci :)
Donc, comme je veux que ce soit automatique, si je teste eth0, eth1, etc jusqu'à trouvé une adresse autre que 127.0.0.1, 192.168.*.* et 10.*.*.* ça devrait bien marcher ?
 
Ligne 21, y'a t'il une contre indication au remplacement de PF_INET par AF_INET ?

Message cité 2 fois
Message édité par souliane le 15-12-2005 à 15:24:11
n°1266067
manatane
En vous remerciant, bonsoir
Posté le 14-12-2005 à 01:01:32  profilanswer
 

souliane a écrit :

Merci :)
Ligne 21, y'a t'il une contre indication au remplacement de PF_INET par AF_INET ?


non je pense pas, d'autant que c'est synonyme il me semble. Ya plus qu'a essayer.

n°1266073
souliane
Posté le 14-12-2005 à 01:44:34  profilanswer
 

Merci encore et bonne nuit !

n°1266325
souliane
Posté le 14-12-2005 à 13:54:31  profilanswer
 

Ca marche super :)
 
Je n'ose pas imaginer tout ce qu'on peut faire avec ioctl quand on sait bien l'utiliser !

n°1266670
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-12-2005 à 18:58:01  profilanswer
 

souliane a écrit :

Ligne 21, y'a t'il une contre indication au remplacement de PF_INET par AF_INET ?


Oui. Ce sont deux valeurs différentes qui n'ont rien à voir.
 
socket() : PF_INET
bind() etc. : AF_INET


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Je n'arrive pas à récupérer mon adresse réseau _externe_

 

Sujets relatifs
Récupérer le content-type d'un fichier ?comment récuperer des information donner par l'utilisateur?
[XSL]Une idee pour recuperer une info precise[xml] récupérer tout le texte d'un élement ?
[Eclipse/CVS] Comment récupérer le nom de la branche avant le commit ?récupérer une variable VBSCRIPT dans une page ASP
Installation d'un service sur un réseauContrôle adresse en javascript
récupérer le code source page Web https..(dhtml, javascript) avec vba?Récupérer les infos d'un fichier txt en batch
Plus de sujets relatifs à : Je n'arrive pas à récupérer mon adresse réseau _externe_


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR