we can get device IP address by domain name.Firstly get the domain name by gethostname(char *,int) function,and then using the following function we get a data structure  including the ip address: hostent * gethostbyname(char *).eg.
int GetIP()
{
    int white_sock;
    struct hostent *site;
    char hostName[20];
    memset(hostName,0,sizeof(hostName));
    gethostname(hostName,sizeof(hostName));
    printf("host name: %s\n",hostName);
    site=gethostbyname(hostName);   //根据域名信息获得主机的IP地址
    if(site == NULL)
    {
        printf("Get site error!\n");
        return -1;
    }
    printf("IP Address: %s\n",inet_ntoa(*((struct in_addr *)site->h_addr)));
    return 1;
}
However,the ip address got in the way above is always not the one we really want.So we can use another method as following:
int GetDeviceIpAddress(char *ipAddr)
{
    register int fd, intrface;
    struct ifreq buf[MAXINTERFACES];
    struct ifconf ifc;
    if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0)
    {
        goto Exit;
    }
   
    ifc.ifc_len = sizeof(buf);        
    ifc.ifc_buf = (caddr_t) buf;
    if (ioctl (fd, SIOCGIFCONF, (char *) &ifc) < 0)
    {
         goto Exit;
    }
   
    intrface = ifc.ifc_len / sizeof (struct ifreq);
    while (intrface-- > 0)
    {
        if ((ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface])) < 0)
        {
            continue; 
        }    
     
    if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface])))
     {
        sprintf(ipAddr,"%s",inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr));
           if( strcmp(ipAddr,"127.0.0.1") != 0 )
        {
            close(fd);
            return 1;
        }
     }
     else
     {
             goto Exit;
      } 
    }
Exit:
    close (fd); 
    return -1;
}
Actually,this way can get all devices' ip address,no matter how many net cards you have.so it is great.
                  	
				
