connaitre adresse IP

connaitre adresse IP - C - Programmation

Marsh Posté le 11-12-2006 à 09:20:02    

Bonjour,
 
quel est la meilleurs méthode pour connaitre l'adresse IP d'une interface (que l'on connait, eth1 par exemple) en C ? (linux)
Mis a part parser la sortie de ifconfig..

Reply

Marsh Posté le 11-12-2006 à 09:20:02   

Reply

Marsh Posté le 11-12-2006 à 11:39:31    

libgtop

Reply

Marsh Posté le 11-12-2006 à 12:48:26    

mouai... désolé, ca m'interesse pas trop. trop de dépense inutile à mes yeux (xml, glib, ...)
Je crois que je prefère parser la sortie de ifconfig eth1 :-)

Reply

Marsh Posté le 14-12-2006 à 14:49:13    

stupide.

Reply

Marsh Posté le 14-12-2006 à 15:26:36    

Code :
  1. #include <netinet/in.h>
  2. #include <sys/socket.h>
  3. #include <arpa/inet.h>
  4. #include <unistd.h>
  5. #include <netdb.h>
  6. #include <net/if.h>
  7. #include <sys/ioctl.h>
  8. /*!
  9. * @brief Récupérer la configuration IP d'une interface de la machine
  10. * @param ip_type : Indique le type d'adresse à renvoyer :
  11. *      -# SIOCGIFADDR = Adresse IP
  12. *      -# SIOCGIFBRDADDR = Adresse de broadcast
  13. *      -# SIOCGIFNETMASK = Masque de réseau
  14. * @param ifname : Nom de l'interface réseau donc il faut récupérer l'adresse (eth0, wifi0...)
  15. * @param addr_ip : Emplacement où sera stocké l'adresse IP (un buffer alloué)
  16. * @return 1 si l'adresse  bien été récupérée, 0 sinon
  17. */
  18. int get_ip(int ip_type,char *ifname,char *addr_ip){
  19.         if(ip_type != SIOCGIFADDR && ip_type != SIOCGIFBRDADDR && ip_type != SIOCGIFNETMASK){
  20.                 fprintf(stderr,"ERR : %s:%i : Type d'adresse indiqué non valide\n",__FILE__,__LINE__);
  21.                 return 0;
  22.         }
  23.         struct ifreq ifr;
  24.         struct sockaddr_in *addrp = NULL;
  25.         memset( &ifr, 0, sizeof( struct ifreq ) );
  26.         strncpy(ifr.ifr_name,ifname,IFNAMSIZ);
  27.         if( ioctl( sockfd, ip_type, &ifr ) == -1 ) {
  28.                 fprintf( stderr, "ERR : Ne peut obtenir l'adresse IP de %s\n",ifname);
  29.                 return 0;
  30.         }
  31.         else{
  32.                 addrp = (struct sockaddr_in *)&(ifr.ifr_addr);
  33.                 printf("DBG : %s:%i : Adresse de %s : %s\n",__FILE__,__LINE__,ifname,inet_ntoa(addrp->sin_addr));
  34.                 strcpy(addr_ip,inet_ntoa(addrp->sin_addr));
  35.                 return 1;
  36.         }
  37. }


 
Par contre, je ne suis plus tout à fait sur des #includes
 
EDIT : en fouillant sur internet ou en lisant le code de ifconfig, tu devrais pouvoir trouver le nécessaire pour obtenir la liste de toutes tes interfaces réseau. (c'est comme ça que j'ai écrit ce bout de code)


Message édité par Dumbledore le 14-12-2006 à 15:31:29
Reply

Marsh Posté le 14-12-2006 à 20:26:46    

merci beaucoup, je vais tester
J'avais une autre piste que j'ai pas tester encore, vu que j'utilise libpcap pour faire du sniff, je pourrais utilisé celle ci car, je connais dans mon programme l'interface donc je connais l'ip, et libpcap construit une structure qui justement contient des informations sur le réseau d'une interface (dont ip, broadcast)
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed