c++ - 使用 Asio 进行 DNS 反向查询

标签 c++ boost-asio reverse-dns

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


编辑:
在 Joachim Pileborg 的帮助下,我得以完成这项任务。所需代码(没有错误处理的 Minimin):

#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;
}

最佳答案

我自己没有在 Boost ASIO 中使用过解析器,但是通过阅读引用文档,您似乎不应该直接使用 ip::basic_resolver。相反,您应该使用例如ip::tcp::resolver 在这种情况下,endpointip::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';

关于c++ - 使用 Asio 进行 DNS 反向查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8939643/

相关文章:

C++ 删除循环问题中的 std::list 元素

c++ - 将类成员函数作为同一类的另一个成员函数的参数传递

c++ - 如何为依赖操作系统的类编写测试

c++ - Boost tcp stream with filtering input stream 导致挂起

amazon-web-services - 使用 Elastic Beanstalk 时如何处理 AWS EC2 实例停用

c++ - std::vector 与 C++ 中的原始数组有多相似?

linux - Linux上的Asio停在epoll()中

c++ - boost::asio 同步服务器在第一个之后不接受连接

python - python中的反向DNS查找返回错误的主机

php - 将 IPV6 转换为 PTR 记录的半字节格式