【问题标题】:How to make ASIO resolve IP address without knowing the service/port?如何在不知道服务/端口的情况下让 ASIO 解析 IP 地址?
【发布时间】:2021-06-14 08:48:33
【问题描述】:

如何在不提供端口/服务名称的情况下让 ASIO 解析域名?

据我所知,ASIO 在解析时需要port number or service name。为什么?我将如何做类似nslookup example.com 的事情?并且不提供服务名称只会让 ASIO 生成错误“tcp::resolver: service not found”。

(并且 SO 上的 other answers 没有帮助。它从地址解析了名称。但我希望反过来。)

【问题讨论】:

  • “为什么?”可能是为了利用SRV 记录的力量。

标签: c++ dns network-programming boost-asio


【解决方案1】:

我会传递一个任意的服务端口。比如“1”。并且忽略它。

为了非常纯粹,您可以告诉查询不需要解析服务:

#include <boost/asio.hpp>
#include <iostream>

int main() {
    using boost::asio::ip::tcp;
    using query = tcp::resolver::query;

    query q("www.example.com", "1", query::numeric_service);
    tcp::resolver r(boost::asio::system_executor{});

    for (auto ep : r.resolve(q)) {
        std::cout << ep.endpoint().address() << "\n";
    }
}

在我的盒子上,它打印:

93.184.216.34
[2606:2800:220:1:248:1893:25c8:1946]

还有更多可用的标志,因此您可以查看documentation for them(例如解析 CNAME 记录)。

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 2018-02-17
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2013-12-09
    • 2016-06-17
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多