OVH Cloud OVH Cloud

Récupérer depuis C++ IP et Masque

3 réponses
Avatar
Xes
Bonjour,
J'aimerais récupérer depuis un programme écrit en C++, l'IP ainsi que le
MASQUE d'une de mes cartes réseaux.

Voici ce que j'ai trouvé sur le net et remis à ma sauce :
------------------------------------------------------------------
#define IFNAME "wlan0"

int fd;
struct ifreq ifr;
u_char *addr;
u_char *mask;

fd = socket (AF_INET, SOCK_DGRAM,IPPROTO_IP);
memset (&ifr, 0, sizeof (struct ifreq));
strcpy (ifr.ifr_name, IFNAME);
ifr.ifr_addr.sa_family = AF_INET;
ioctl(fd, SIOCGIFADDR, &ifr);

addr=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_addr)->sin_addr);
mask=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_netmask)->sin_addr);
------------------------------------------------------------------
addr contient bien l'adresse IP mais mask ne contient pas le masque mais
également l'adresse IP

Comment pourais je faire pour récupérer ce masque svp ?

Merci pour votre aide

3 réponses

Avatar
Samuel Krempp
(25 April 2005 17:31,

addr=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_addr)->sin_addr);
mask=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_netmask)->sin_addr);


ce n'est pas une question de C++, d'autre groupes seraient certainement plus
adaptés.

--
Sam

Avatar
vincent.kergonna
Xes wrote in message news:<426d0d7a$0$20639$...
Bonjour,
J'aimerais récupérer depuis un programme écrit en C++, l'IP ainsi que le
MASQUE d'une de mes cartes réseaux.

Voici ce que j'ai trouvé sur le net et remis à ma sauce :
------------------------------------------------------------------
#define IFNAME "wlan0"

int fd;
struct ifreq ifr;
u_char *addr;
u_char *mask;

fd = socket (AF_INET, SOCK_DGRAM,IPPROTO_IP);
memset (&ifr, 0, sizeof (struct ifreq));
strcpy (ifr.ifr_name, IFNAME);
ifr.ifr_addr.sa_family = AF_INET;
ioctl(fd, SIOCGIFADDR, &ifr);

addr=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_addr)->sin_addr);
mask=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_netmask)->sin_addr);
------------------------------------------------------------------
addr contient bien l'adresse IP mais mask ne contient pas le masque mais
également l'adresse IP


C'est normal, il faut réinitialiser la structure ifr pour récupérer le masque.
Comme ceci:

ioctl(fd, SIOCGIFADDR, &ifr);
addr=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_addr)->sin_addr);

ioctl (fd, SIOCGIFNETMASK, &ifr);
mask=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_netmask)->sin_addr);

Je n'ai pas testé mais ca doit fonctionner je pense.


Comment pourais je faire pour récupérer ce masque svp ?

Merci pour votre aide


Avatar
Xes
Xes wrote in message news:<426d0d7a$0$20639$...

Bonjour,
J'aimerais récupérer depuis un programme écrit en C++, l'IP ainsi que le
MASQUE d'une de mes cartes réseaux.

Voici ce que j'ai trouvé sur le net et remis à ma sauce :
------------------------------------------------------------------
#define IFNAME "wlan0"

int fd;
struct ifreq ifr;
u_char *addr;
u_char *mask;

fd = socket (AF_INET, SOCK_DGRAM,IPPROTO_IP);
memset (&ifr, 0, sizeof (struct ifreq));
strcpy (ifr.ifr_name, IFNAME);
ifr.ifr_addr.sa_family = AF_INET;
ioctl(fd, SIOCGIFADDR, &ifr);

addr=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_addr)->sin_addr);
mask=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_netmask)->sin_addr);
------------------------------------------------------------------
addr contient bien l'adresse IP mais mask ne contient pas le masque mais
également l'adresse IP



C'est normal, il faut réinitialiser la structure ifr pour récupérer le masque.
Comme ceci:

ioctl(fd, SIOCGIFADDR, &ifr);
addr=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_addr)->sin_addr);

ioctl (fd, SIOCGIFNETMASK, &ifr);
mask=(u_char*)&(((struct sockaddr_in * )&ifr.ifr_netmask)->sin_addr);

Je n'ai pas testé mais ca doit fonctionner je pense.


C'était bien ca !
Merci pour ton aide ..