首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C++中使用域名获取域名ip地址?

如何在C++中使用域名获取域名ip地址?
EN

Stack Overflow用户
提问于 2012-07-31 17:30:03
回答 1查看 5.5K关注 0票数 3

我使用的是visual c++,

我想从域名中获取域名ip地址..我怎么才能得到它..我已经尝试过gethostbyname函数...下面是我的代码..。

代码语言:javascript
复制
    HOSTENT* remoteHost;        
    IN_ADDR addr;       
    hostName = "domainname.com"; 
    printf("Calling gethostbyname with %s\n", hostName);
remoteHost =gethostbyname(hostName);
memcpy(&addr.S_un.S_addr, remoteHost->h_addr, remoteHost->h_length);
printf("The IP address is: %s\n", inet_ntoa(addr));

但是我得到了一个错误的ip地址。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-31 21:10:44

这是一个我有时觉得很方便的小工具的完整源代码(我已将其命名为"resolve")。它所做的就是将域名解析为数字IP (v4)地址,并将其打印出来。实际上,它是针对Windows的--对于Linux (或类似的系统),您只需要去掉use_WSA类(及其对象)即可。

代码语言:javascript
复制
#include <windows.h>
#include <winsock.h>
#include <iostream>
#include <iterator>
#include <exception>
#include <algorithm>
#include <iomanip>
#include "infix_iterator.h"

class use_WSA { 
    WSADATA d; 
    WORD ver;
public:
    use_WSA() : ver(MAKEWORD(1,1)) { 
        if ((WSAStartup(ver, &d)!=0) || (ver != d.wVersion))
            throw(std::runtime_error("Error starting Winsock"));
    }
    ~use_WSA() { WSACleanup(); }    
};

int main(int argc, char **argv) {
    if ( argc < 2 ) {
        std::cerr << "Usage: resolve <host-name>";
        return EXIT_FAILURE;
    }

    try { 
        use_WSA x;

        hostent *h = gethostbyname(argv[1]);
        unsigned char *addr = reinterpret_cast<unsigned char *>(h->h_addr_list[0]);
        std::copy(addr, addr+4, infix_ostream_iterator<unsigned int>(std::cout, "."));
    }
    catch (std::exception const &exc) {
        std::cerr << exc.what() << "\n";
        return EXIT_FAILURE;
    }

    return 0;
}

这也使用了我之前发布的infix_ostream_iterator

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11737066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档