c – 使用Asio进行DNS反向查找

前端之家收集整理的这篇文章主要介绍了c – 使用Asio进行DNS反向查找前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想用asio进行DNS反向查找(返回给定IP地址的主机名),但我无法弄清楚我需要实现哪些组件. Asio documentmentiation是指ip :: basic_resolver :: resolve,但是需要一个endpoint_type,我不知道如何使用它.
有人可以发帖或参考一个例子吗?

编辑:
在Joachim Pileborg的帮助下,我完成了任务.需要的代码(Minumin没有错误处理):

#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,在这种情况下,端点是ip :: 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&C++相关文章