【发布时间】:2015-09-29 09:14:28
【问题描述】:
我正在尝试将域名解析为 ipv4 地址。
这是我正在做的最小代码
addrinfo hints, *results;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
int error = getaddrinfo("google.com", 0, &hints, &results);
for(addrinfo* info = results; info; info = info->ai_next)
{
std::cout << (info->ai_family == AF_INET6 ? "ip6" : "ip4")
<< '[' << info->ai_addrlen << "]: ";
for(uint i = 0; i < info->ai_addrlen; ++i)
std::cout << int(((uint8_t*)info->ai_addr)[i]) << ' ';
std::cout << std::endl;
}
freeaddrinfo(results);
当我运行它时,它会打印:
ip4[16]: 2 0 0 0 216 58 208 238 0 0 0 0 0 0 0 0
ip4[16]: 2 0 0 0 216 58 208 238 0 0 0 0 0 0 0 0
ip4[16]: 2 0 0 0 216 58 208 238 0 0 0 0 0 0 0 0
google.com的实际ip是216.58.208.238。所以出于某种原因,对于 ip v4,ai_addr 包含 16 个字节,实际上将地址存储在第 4 到第 8 个字节处。
我的问题是:其他 12 个字节是什么?
我阅读了the docs,并用谷歌搜索了一下,但在addr_len 上一无所获。另请注意,我没有设置AI_V4MAPPED 标志。
【问题讨论】: