【问题标题】: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 没有帮助。它从地址解析了名称。但我希望反过来。)
【问题讨论】:
标签:
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 记录)。