namespace Poco { namespace Net {
class Net_API DNS {
public:
static HostEntry hostByName(const string& hostname); // 域名 -> HostEntry
static HostEntry hostByAddress(const IPAddress& address); // IP -> HostEntry (反向解析)
static HostEntry resolve(const string& address); // 自動判斷域名/IP
static IPAddress resolveOne(const string& address); // 僅返回首個 IP
static HostEntry thisHost(); // 本機信息
static string hostName(); // 本機主機名
};
}}
HostEntry 包含:規範名 (name())、別名列表 (aliases())、IP 地址列表 (addresses())。
#include "Poco/Net/DNS.h"
#include <iostream>
using Poco::Net::DNS;
using Poco::Net::IPAddress;
using Poco::Net::HostEntry;
int main(int argc, char** argv) {
if (argc != 2) {
std::cerr << "Usage: " << argv[0] << " <hostname>" << std::endl;
return 1;
}
try {
const HostEntry& entry = DNS::hostByName(argv[1]);
std::cout << "Canonical Name: " << entry.name() << std::endl;
for (const auto& alias : entry.aliases())
std::cout << "Alias: " << alias << std::endl;
for (const auto& addr : entry.addresses())
std::cout << "Address: " << addr.toString() << std::endl;
} catch (Poco::Exception& e) {
std::cerr << "DNS Error: " << e.displayText() << std::endl;
return 1;
}
return 0;
}
g++ name_solver.cpp -o name_solver -I/usr/local/include -L/usr/local/lib -lPocoNet
./name_solver baidu.com
./name_solver www.ustc.edu.cn
$ ./name_solver baidu.com
Canonical Name: baidu.com
Address: 123.125.114.144
Address: 220.181.111.85
Address: 220.181.111.86
$ ./name_solver www.ustc.edu.cn
Canonical Name: ustc.edu.cn
Address: 202.38.64.246
Poco::Net::HostNotFoundException 等,必須 try-catchaddresses() 返回 IPAddress 列表,自動包含 IPv4/IPv6,toString() 正確格式化掌握 Poco::Net::DNS,即可輕鬆實現服務發現、負載均衡前置解析、網絡診斷工具等功能。