gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:13 26 4
gpt4 key购买 nike

我正在使用 Visual C++,

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

    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地址。

最佳答案

这是我有时觉得很方便的一个小实用程序的完整源代码(我将其命名为“resolve”)。它所做的只是将域名解析为数字 IP (v4) 地址,并将其打印出来。按原样,它适用于 Windows——对于 Linux(或类似系统),您只需要摆脱 use_WSA 类(及其对象)。

#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我以前发过。

关于c++ - 如何在 C++ 中使用域名获取域 ip 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11737066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com