This is a discussion on Get list of all IP Addresses on AIX within the AIX Operating System forums, part of the Unix Operating Systems category; --> I have been trying to get all ip addresses from all interfaces, with the code listed below. However, all ...
| |||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| I have been trying to get all ip addresses from all interfaces, with the code listed below. However, all I get is the 1st IP only. I have configured 2 IPs on a single interface, I want to get both from my c++ code. thanks svirdi #include <unistd.h> #include <stropts.h> #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <net/if.h> #include <sys/ioctl.h> //#include <sys/sockio.h> int main(int argn,char** argv) { int sock,n; struct ifreq *ifr; struct ifconf ifc; char buf[1024],addres[16]; unsigned char* adr; sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); // sock = socket(2, 2, 0); printf("sock=%d\n", sock); if (sock == -1) { printf("There is trouble of sock!! Exiting\n\n"); return 0; } ifc.ifc_buf = buf; //ifc.ifc_len = 1024; int retVal = ioctl(sock, SIOCGIFCONF, &ifc); printf("retval ioctl(sock, SIOCGIFCONF, &ifc)=%d\n\n", retVal); if (retVal < 0) { printf("There is trouble with ioctl\n\n"); close (sock); return 0; } n = ifc.ifc_len/sizeof(struct ifreq); for (ifr = ifc.ifc_req; n > 0; n--, ifr++) { int rval = ioctl( sock, SIOCGIFADDR, ifr); printf(" ioctl( sock, SIOCGIFADDR, ifr) rval = %d\n", rval); if (ifr->ifr_addr.sa_family == AF_INET || ifr->ifr_addr.sa_family == AF_INET6) { adr = reinterpret_cast<unsigned char*>(ifr->ifr_ifru.ifru_addr.sa_data+2); snprintf(addres,16,"%i.%i.%i.%i",adr[0],adr[1],adr[2],adr[3]); printf("%s = %s\n",ifr->ifr_name,addres); } } close(sock); return 0; } |