c++通过域名获取ip地址

开发工具:Qt Creator

c++版本:c++ 11

系统平台:windows 7


在项配置文件*.pro中加入winsock的支持库,直接加入下面的配置

LIBS += -lpthread libwsock32 libws2_32


引入头文件,引入std命令空间

#include <iostream>
#include <string>
#include <winsock2.h>

using namespace std;


通过域名获取ip的函数实现

/************************
* 通过域名获取IP地址
* hostname : 域名地址  例:www.sindsun.com
************************/
char *getIpByHostName(char *hostname){
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2), &wsaData);

    struct hostent* hostAddr = gethostbyname(hostname);
    if(hostAddr == nullptr){
        cout << "无法找到主机" << endl;
        return nullptr;
    }
    //遍历别名
    for(int i=0; hostAddr->h_aliases[i]; i++){
        printf("Alias %d : %s\n", i+1, hostAddr->h_aliases[i]);
    }
    //地址类型
    printf("Address type : %s\n", (hostAddr->h_addrtype==AF_INET) ? "AF_INET" : "AF_INET6");
    //IP地址
    char *ipv4 = new char;
    memset(ipv4, 0, 32);

    for(int i=0; hostAddr->h_addr_list[i]; i++){
        //这里使用标准转换运算符reinterpret_cast,强制转换会出现警告
        struct in_addr tmpAddr = *reinterpret_cast<struct in_addr*>(hostAddr->h_addr_list[i]);
        char *ch = inet_ntoa( tmpAddr);
        strcat(ipv4, ch);
    }

    WSACleanup();

    return ipv4;
}

在封装的这个函数中,我打断点看了一下gethostbyname函数返回的参数,如下图

image.png

image.png


测试结果

int main()
{
    char *ip = new char;
    ip = getIpByHostName("www.sindsun.com");
    cout << ip << endl;

    return 0;
}

控制台打印出的结果如图

image.png


利用getaddrinfo函数获取的文档可以到微软开发人员中心进行查看。

版权声明: 此文为本站源创文章[或由本站编辑从网络整理改编],
转载请备注出处:
[狂码一生] https://www.sindsun.com/articles/17/131
[若此文确切存在侵权,请联系本站管理员进行删除!]


--THE END--