跨平台智能域名解析

核能气质少年 提交于 2020-01-23 18:24:33

1、Linux平台

void get_ips_by_name(string domain,vector<string>& ips)
{
    ips.clear();
    size_t  i;

    struct hostent hostbuf;
    hostent* pHost= &hostbuf;
    char   hostBuf[1024];
    size_t buffLen = sizeof(hostBuf);
    int    ret;
    int    errCode;

    ret = gethostbyname_r(domain.c_str(), pHost, hostBuf, buffLen, &pHost, &errCode);
    if(0 != ret)
    {
        return ;
    }
    else
    {
        if (!pHost)
        {
            return ;
        }

        for(i = 0; pHost!= NULL && pHost->h_addr_list[i] != NULL; i++)
        {
            struct in_addr* pAddr = (in_addr*)(pHost->h_addr_list[i]);
            char str_ip[20] = {0};
            inet_ntop(AF_INET, (const void *)(&(pAddr->s_addr)), str_ip, 20);
            ips.push_back(str_ip);
        }
    }
}

 

2、iOS平台

void get_ips_by_name(string domain,vector<string>& ips)
{
    ips.clear();
    char   szIp[32];
    struct hostent* hosts = gethostbyname(domain.c_str());
    if (hosts)
    {
        for(int i = 0; hosts!= NULL && hosts->h_addr_list[i] != NULL; i++)
        {
            struct in_addr* pAddr = (in_addr*)(hosts->h_addr_list[i]);
            char str_ip[20] = {0};
            inet_ntop(AF_INET, (const void *)(&(pAddr->s_addr)), str_ip, 20);
            ips.push_back(str_ip);
        }
    }
}

 

3、Windows平台

void get_ips_by_name(string domain,vector<string>& ips)
{
    HOSTENT *hosts;
    char   szIp[32];

    hosts=gethostbyname(domain.c_str());
    if(hosts!=0)
    {
        char ** ppAddr = hosts->h_addr_list ;
        while (*ppAddr != NULL)
        {
            strcpy(szIp,inet_ntoa(*(LPIN_ADDR)*(ppAddr)));
            ips.push_back(szIp);
            ppAddr++;
        }
    }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!