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

  FORUM HardWare.fr
  Programmation
  C

  [C] recupérer son adresse IP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] recupérer son adresse IP

n°782735
kant23
Kind of Blue
Posté le 30-06-2004 à 18:14:18  profilanswer
 

Bonjour,
voila, je cherche une methode pour recuperer sa propre adresse IP en C sous UNIX.
un peu comme si la fonction gethostaddr() existait :)
merci

mood
Publicité
Posté le 30-06-2004 à 18:14:18  profilanswer
 

n°782749
kant23
Kind of Blue
Posté le 30-06-2004 à 18:43:31  profilanswer
 

j ai bien fait ca mais bon, ca me retourne 127.0.0.1, donc bof...
 

Code :
  1. #include <stdio.h>
  2. #include <netinet/in.h>
  3. #include <netdb.h>
  4. #include <arpa/inet.h>
  5. int main(void){
  6.   struct hostent * host;
  7.   host = gethostbyname("localhost" );
  8.   char * name = inet_ntoa(*(struct in_addr *)host->h_addr);
  9.   printf("name: %s\n",name);
  10.   return 0;
  11.   }


Message édité par kant23 le 30-06-2004 à 18:44:02
n°782822
jagstang
Pa Capona ಠ_ಠ
Posté le 30-06-2004 à 19:45:22  profilanswer
 

c'est normal, tu donnes localhost, il va te retourner 127.0.0.1....
 
essaie de mettre le nom de ta machine plutôt...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°782854
jagstang
Pa Capona ಠ_ಠ
Posté le 30-06-2004 à 20:05:11  profilanswer
 

ping localhost >> [127.0.0.1]
ping machinename >> [192.168.1.6]  


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°782970
gm_superst​ar
Appelez-moi Super
Posté le 30-06-2004 à 22:22:42  profilanswer
 

Le problème des noms c'est qu'ils peuvent changer...
 
Mieux vaut passer par l'interface.
 
Voir ioctl() avec SIOCGIFADDR pour récupérer l'adresse d'une interface donnée (et SIOCGIFCONF pour récupérer les interfaces dispo)


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
n°783173
SoWhatIn22
Posté le 01-07-2004 à 09:04:44  profilanswer
 

au lieu d'utiliser "localhost", tu peux pe utiliser les infos que te donne la fonction 'gethostname'. C'est sans doute suffisant pour ce que tu veux faire.

n°783247
kant23
Kind of Blue
Posté le 01-07-2004 à 10:29:32  profilanswer
 

SoWhatIn22 a écrit :

au lieu d'utiliser "localhost", tu peux pe utiliser les infos que te donne la fonction 'gethostname'. C'est sans doute suffisant pour ce que tu veux faire.


gethostname ne revoit que le nom de ma machine, ce qui donne exactement le même resultat...
je vais regarder du coté de ioctl(), mais ca m'a pas l air tres POSIX  
merci pour vos réponses

n°783311
SoWhatIn22
Posté le 01-07-2004 à 11:19:16  profilanswer
 

gethostname va essayer de faire une résolution DNS ou NIS (j'en sais rien) pour retrouver le nom de la machine en question. Le resulat risque donc de ne pas être "localhost". A partir du vrai nom de la machine, tu pourras retrouver son IP publique.

n°783331
kant23
Kind of Blue
Posté le 01-07-2004 à 11:31:04  profilanswer
 

c'est ce que j'ai fait, j obtient le vrai nom de ma machine que me renvoit  127.0.0.1, c'est pareil avec ping d'ailleurs !
 

Code :
  1. [pierre@Perico sys]$ ping Perico -c1
  2. PING Perico (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data.
  3. 64 bytes from Perico (127.0.0.1): icmp_seq=1 ttl=64 time=0.062 ms


 
mais je suis d'accord avec toi que ca devrait pas le faire (le DNS doit pas être bien configuré), mais si ca fait ca sur ma machine ca peut le faire sur une autre, et je prefere une solution que marchera a tous les coups, sans dependre du DNS


Message édité par kant23 le 01-07-2004 à 11:36:23
n°783446
kant23
Kind of Blue
Posté le 01-07-2004 à 13:04:46  profilanswer
 

Bon j ai trouvé comment faire avec ioctl, merci a vous :)
si ca interesse quelqun:
 

Code :
  1. #include <stdio.h>
  2. #include <sys/ioctl.h>
  3. #include <strings.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include <sys/socket.h>
  7. int main(void){
  8.  
  9.   int sock = socket(PF_INET, SOCK_STREAM,0);
  10.   if(sock == -1) {
  11.     perror("main: socket \n" );
  12.     exit(1);
  13.   }
  14. u_int32_t nip;
  15. getMyIP(sock,"eth0",&nip);
  16. struct in_addr in;
  17. in.s_addr = nip;
  18. char * cip =  inet_ntoa( in );
  19. printf("my IP: %s\n",cip);
  20. return 0;
  21. }
  22. int getMyIP(int fd, char* ifname,  u_int32_t * ipaddr) {
  23.   /* fd: opened file descriptor
  24.    * ifname: if name eg: "eth0"
  25.    */
  26. #define IFNAMSIZ 16
  27. struct ifreq
  28. {
  29.     char ifr_name[IFNAMSIZ];
  30.     struct sockaddr ifr_addr;
  31. };
  32.   struct ifreq ifr;
  33.   memcpy(ifr.ifr_name,ifname,IFNAMSIZ);
  34.   if(ioctl(fd,SIOCGIFADDR,&ifr) == -1){
  35.     perror("getMyIP: ioctl" );
  36.     exit(-1);
  37. }
  38.   memcpy(ipaddr,&ifr.ifr_addr.sa_data[2],4);
  39.   return 0;
  40. }


Message édité par kant23 le 01-07-2004 à 13:14:24

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

  [C] recupérer son adresse IP

 

Sujets relatifs
[asp] récupérer des paramètres en affichant une imageRécupérer via Javascript une propriété d'une class CSS non utilisé
[vbs] Comment ouvrir un fichier et récupérer le résultat d'une cmdshell /récuperer des infos
[Résolu] CGI - Comment récupérer le MIME ?Récupérer une donnée dans une BDD
recuperer des donnees dans une bdd![PHP] récupérer les donnés d'un autre site
Comment récuperer des pages web...Passer l'adresse d'un tableau en parametre
Plus de sujets relatifs à : [C] recupérer son adresse IP


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