根据网络接口名获取IP地址

来源:互联网 发布:java object转date 编辑:程序博客网 时间:2024/05/16 12:07

//
//  根据网络接口名获取IP地址
//  

int  getip_by_name(char* pOutIp,char *devname)
{
    int i=0;
    int sockfd;
    struct ifconf ifconf;
    char buf[512];
    struct ifreq *ifreq;
    char* ip = NULL;
    // init ifconf
    ifconf.ifc_len = 512;
    ifconf.ifc_buf = buf;


    if(!pOutIp || !devname)
    {
      return -1;
    }


    if((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0)
    {
        return -1;
    }
    ioctl(sockfd, SIOCGIFCONF, &ifconf);    // get the whole info
    close(sockfd);
    // get one by one
    i=(ifconf.ifc_len/sizeof(struct ifreq));
    ifreq = (struct ifreq*)&buf[ifconf.ifc_len-sizeof(struct ifreq)];
    for(/*i=(ifconf.ifc_len/sizeof(struct ifreq))*/; i>0; i--)
    {
        ip = inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr);
        if(strcmp(ifreq->ifr_name, devname)==0)
        {
            strcpy(pOutIp,ip);
            return 0;
        }
        ifreq--;
    }
    return -1;
}

原创粉丝点击