现在的位置: 首页 > 综合 > 正文

linux c获取本机网卡ip地址

2013年12月08日 ⁄ 综合 ⁄ 共 835字 ⁄ 字号 评论关闭

获取本机网卡绑定的IPv4地址。

int GetLoalIP(vector<char*>& local_addr){
    int ret = ErrorCode::Success;

    local_addr.clear();
    
    ifaddrs* ifap;
    if(getifaddrs(&ifap) == -1){
        return ErrorCode::SystemRetrieveLocalIPError;
    }

    ifaddrs* p = ifap;
    while(p != NULL){
        sockaddr* addr = p->ifa_addr;
        
        // retrieve ipv4 addr
        if(addr->sa_family == AF_INET){
            in_addr* inaddr = &((sockaddr_in*)addr)->sin_addr;
            
            char buf[16];
            memset(buf, 0, sizeof(buf));
            
            if((inet_ntop(addr->sa_family, inaddr, buf, sizeof(buf))) == NULL){
                Fatal("convert local ip failed, errno=%d(%#x)", errno, errno);
                ret = ErrorCode::SystemRetrieveLocalIPError;
                break;
            }

            int size = strlen(buf);
            char* heap_buf = new char[size + 1];
            memcpy(heap_buf, buf, size + 1);
            local_addr.push_back(heap_buf);
        }
        
        p = p->ifa_next;
    }

    freeifaddrs(ifap);

    if(ret != ErrorCode::Success){
        return ret;
    }

    if(local_addr.size() == 0){
        return ErrorCode::SystemRetrieveLocalIPError;
    }
    Trace("retrieve local ip success!");
    
    return ret;
}

抱歉!评论已关闭.