Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 69 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Récupérer Adresse IP Réseau [inet_ntoa]

 
n°15173
tetsuo20
Profil : Jeune recrue
Posté le 09-11-2005 à 15:27:21  profilanswer
 

Voila, je cherche a récupérer mon adresse IP du point de vue  de mon réseau....
Je voudrais obtenir, par exemple, 192.168.0.x et non 127.0.0.1
 

Code :
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <arpa/inet.h>
  5. #include <stdio.h>
  6. #include <unistd.h>
  7. #include <netdb.h>
  8. void view_ip()
  9. {
  10.   char s[256];
  11.   struct hostent *host;
  12.   struct in_addr **adr;
  13.   if (!gethostname(s, 256))
  14.     if ((host = gethostbyname(s)) != NULL)
  15.       for (adr = (struct in_addr **)host->h_addr_list; *adr; adr++)
  16.           printf("IP : %s\n", inet_ntoa(**adr));
  17. }


 
voila.....  :)  
 
Merci de votre aide ! :jap:

n°15175
01iv'
Profil : Membre
Posté le 09-11-2005 à 18:02:55  profilanswer
 

Citation :

Les  interrogations  du  serveur  de  noms  effectuées par gethostbyname() et gethost-
       byaddr() utilisent les éléments suivants : le serveur de noms named(8), les lignes  de
       /etc/hosts,  et l'annuaire Network Information Service (NIS ou YP), suivant le contenu
       de la ligne order du fichier /etc/host.conf.  (Voir resolv+(8)).  L'action par  défaut
       consiste à interroger named(8), puis /etc/hosts.


je suppose que tu n'as pas de DNS, donc il va regarder /etc/hosts et la première ligne doit être 127.0.0.1

n°15180
tetsuo20
Profil : Jeune recrue
Posté le 10-11-2005 à 10:03:33  profilanswer
 

Alors y a t-il un autre moyen pour la récupérer ?
Comment il fait "ifconfig" ? Il ne questionne pas le routeur ?

n°15183
01iv'
Profil : Membre
Posté le 10-11-2005 à 11:53:31  profilanswer
 

sous UNIX il te suffit de modifier ton /etc/hosts ... sous Windows faut modifier l'équivalent.
"ifconfig" lui ne récupére pas d'adresse, il fait juste un "ioctl" sur la carte réseau pour lui affecter une adresse... en général soit l'utilisateur lui passe explicitement l'IP ou alors l'IP est stocké dans un fichier connu de ifconfig (petit mécanisme de script).
 
A noter qu'en modifiant ton /etc/hosts, tu récupéreras 192.168.0.x et 127.0.0.1 (après l'ordre sera le même que celui de ton /etc/hosts)


Message édité par bbober le 10-11-2005 à 12:01:36
n°15220
damien99
Profil : Jeune recrue
Posté le 14-11-2005 à 21:44:07  profilanswer
 

slt :)
 
Moi pour un programme j'avais réussit à afficher l'IP locale (192.168.0.X) et l'IP internet s'il y en avait une.
 
Je me souvient plus trop du truc avec l'IP 127.0.0.1 .
 
J'avait bien galéré...
J'avait quant même réussit à mettre un truc au point mais je crois que le programme plantait quant on le démarrait sur une machine sans carte réseau et sans connection externe.
 
Mais bon moi ça me dérangeait pas parce que c'était un tchat donc si ya pas de réseau ça sert à rien.
 
Je posterai ce code source dès que j'aurai le temps de le retrouver (surement demain soir ou mercredi au pire)
 
A+


Message édité par damien99 le 14-11-2005 à 21:45:09
n°15235
damien99
Profil : Jeune recrue
Posté le 16-11-2005 à 16:22:41  profilanswer
 

Voila le code pour avoir l'IP locale et l'IP internet s'il y en a une :
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <winsock2.h>
  4. #pragma comment(lib, "ws2_32.lib" )
  5. int main()
  6. {
  7. char mon_nom[64];     
  8. HOSTENT* ip_resolue;
  9. SOCKADDR_IN valip;
  10. SOCKADDR_IN sin;
  11. int compteur;
  12. WSADATA WSAData;
  13. WSAStartup(MAKEWORD(2,0), &WSAData);
  14. gethostname(mon_nom, sizeof(mon_nom));
  15. ip_resolue = gethostbyname(mon_nom);
  16. if(ip_resolue->h_addr_list[0] != NULL)
  17. {
  18. for (compteur = 0; ip_resolue->h_addr_list[compteur+1] != NULL; compteur++) {}
  19.         memcpy(&valip.sin_addr.s_addr, ip_resolue->h_addr_list[compteur], ip_resolue->h_length);
  20. printf("\nAdresse(s) IP : %s",inet_ntoa(valip.sin_addr));
  21. }
  22. if((ip_resolue->h_addr_list[0] != NULL)&&(ip_resolue->h_addr_list[1] != NULL))
  23. {
  24.         memcpy(&valip.sin_addr.s_addr, ip_resolue->h_addr_list[0], ip_resolue->h_length);
  25. printf(" / %s",inet_ntoa(valip.sin_addr));
  26. }
  27. getch();
  28. return(0);
  29. }


là c'est "winsock2.h" qui est utilisé, je sais pas si ce code marche aussi avec "sys/socket.h"
 
:)

n°15237
01iv'
Profil : Membre
Posté le 16-11-2005 à 17:47:28  profilanswer
 

sauf que tetsuo20 semble faire du code UNIX (d'après les include) alors que le tiens est spécifique Windows.

n°15260
damien99
Profil : Jeune recrue
Posté le 18-11-2005 à 13:56:39  profilanswer
 

ouai c'est vrai c'est pour windows ce code.
 
Mais est ce qu'il existe une fonction qui marche à la fois pour windows et pour unix.
 
 :)  


Aller à :
Ajouter une réponse