How to get all IP Addresses on AIX using C++

  • Follow


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. I am running my
sample app on AIX ver 5.2
I have also tried the gethostbyname() API, but with no luck.


Sample code:
#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; 
}

0
Reply saurabh.virdi (3) 8/10/2006 7:44:54 AM

svirdi wrote:

> 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. I am running my
> sample app on AIX ver 5.2

I'd give comp.unix.aix a try.
0
Reply Spoons 8/10/2006 7:59:34 AM


1 Replies
648 Views

(page loaded in 0.027 seconds)

Similiar Articles:













7/22/2012 10:35:12 AM


Reply: