11

我想用 asio 进行 DNS 反向查找(返回给定 IP 地址的主机名),但我无法弄清楚我需要哪些组件来实现这一点。Asio 文档是指ip::basic_resolver::resolve,但endpoint_type需要 an ,我不知道如何使用它。
有人可以发布或参考一个例子吗?


编辑:
在 Joachim Pileborg 的帮助下,我能够完成任务。需要的代码(最小没有错误处理):

#include <asio.hpp>
#include <string>
#include <iostream>

int main()
{
    asio::ip::address_v4 ipa = asio::ip::address_v4::from_string("8.8.8.8");    
    asio::ip::tcp::endpoint ep;
    ep.address(ipa);

    asio::io_service io_service;
    asio::ip::tcp::resolver resolver(io_service);
    asio::ip::tcp::resolver::iterator destination = resolver.resolve(ep);

    std::cout << destination->host_name() << std::endl;

    return 0;
}
4

1 回答 1

10

我自己没有在 Boost ASIO 中使用过解析器,但是通读参考文档,您似乎不应该ip::basic_resolver直接使用。相反,您应该使用 egip::tcp::resolver在这种情况下 theendpointip::tcp::endpoint.

编辑

由于每个主机可以有多个主机名,因此可以像这样扩展 OPs 解决方案:

asio::ip::tcp::resolver::iterator itr = resolver.resolve(ep);
asio::ip::tcp::resolver::iterator end;

for (int i = 1; itr != end; itr++, i++)
    std::cout << "hostname #" << i << ": " << itr->host_name() << '\n';
于 2012-01-20T10:20:50.127 回答