如何确定服务器是否只能使用 IPv6 访问

问题描述

使用带有 Indy10 的 Delphi 7,我需要为不支持 IPv6 的服务创建一个 IPv6 到 IPv4 的代理。我能应付得了。我面临的唯一问题是,如果他们输入的是域名而不是 IP 地址,我如何确定目标服务器是否只能通过 IPv6 而不是 IPv4 访问?如果 IPv4 可用,我更愿意直接发送请求而不是通过代理。

使用 TIdDNSResolver 是唯一的解决方案吗?

我找到了用于使用它的 2 个函数代码一个返回 IPv4,另一个返回 IPv6 地址。如果只有 IPv6 可用,大概 IPv4 函数将不会返回任何内容

但是这两个功能都需要指定一个 DNS 服务器。我怎样才能找到一个?有没有办法使用认的 DNS 服务器来查找 IP 地址,也许使用 Windows API 而不是 Indy?

解决方法

您的问题实际上有几个问题。我会回答这个问题:“我如何找到 DNS 服务器地址?”。

一个答案是:在 IpHelper API 中调用 GetAdaptersAddresses。此调用将返回许多地址,包括 DNS 地址。在 documentation 中有一个 C++ 示例,您可以将其转换为 Delphi。

另一个答案是使用命令行 IPCONFIG /ALL。在输出中,您将找到 DNS 地址。

第三个答案是使用 WMI 查询。见this question