1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| char * get_ipv4_addr(char * iface, int fdsk){
struct ifconf ifc;
struct ifreq *ifr;
struct sockaddr * ip;
struct sockaddr_in * ip_in;
int numreqs=30;
int n;
/* initialisation du buffer */
ifc.ifc_buf=NULL;
for(; ; ){
ifc.ifc_len = sizeof(struct ifreq) * numreqs;
ifc.ifc_buf = realloc(ifc.ifc_buf, ifc.ifc_len);
strcpy(ifc.ifc_req->ifr_name,iface);
/* on passe par un goto pour liberer
les structures
*/
if(ioctl(fdsk,SIOCGIFCONF,&ifc)<0){
perror("SIOCGIFCONF");
goto out;
}
/* */
if(ifc.ifc_len==sizeof(struct ifreq)* numreqs){
numreqs+=10;
printf("numreqs %d \n",numreqs);
continue;
}
break;
}
ifr=ifc.ifc_req;
for(n=0;n<ifc.ifc_len;n+=sizeof(struct ifreq)){
printf("le nom de l'interface %s \n",ifr->ifr_name);
if(!strcmp(ifr->ifr_name,iface)){
ip=&(ifr->ifr_addr);
ip_in=(struct sockaddr_in*)ip;
printf("l'adresse %s \n",inet_ntoa(ip_in->sin_addr));
return(inet_ntoa(ip_in->sin_addr));
}
ifr++;
}
return(NULL);
out:
free(ifc.ifc_buf);
exit(2);
} |
Partager