1

我正在使用一个被愚蠢地硬编码的第三方库套件来调用 GetHostEntry.AddressList[0] 以获得本地 IP 地址。它也不是为支持 IPv6 而编写的。我在所有网络接口上禁用了 IPv6,但我的测试程序(以及第 3 方库)中的 AddressList[0] 仍然返回 {::1} 而不是我的第一个 IPv4 地址。是否有任何 Windows 设置我可以更改以解决此问题,使其表现得像 Windows XP(返回第一个 IPv4 地址)?

这是我用来验证行为的测试程序:

   class Program
   {
    static void Main(string[] args)
    {
     List<string> addresses = ( from address in Dns.GetHostEntry(Dns.GetHostName()).AddressList select address.ToString() ).ToList();
   foreach (string a in addresses)
     {
      Console.WriteLine(a);
     }
     Console.Read();
    }
 }

在 Windows XP 机器上,程序的输出是 192.168.56.1

在我的 Windows 7 机器上,程序的输出是 ::1 192.168.56.2

有什么建议么?更改第三方库代码不是我可用的选项。

4

1 回答 1

3

每个成员IPHostEntry.AddressList都有IPAddress一个属性AddressFamily,您可以使用它来过滤特定的家庭。

例如,仅限 IPv4 地址:

from address in Dns.GetHostEntry(Dns.GetHostName()).AddressList
where address.AddressFamily == AddressFamily.InterNetwork
select address.ToString()

(更改为AddressFamily.InterNetworkV6限制为 IPv6 地址。)

编辑:显然这是一个代码更改,因此要么(1)在第三方库的接口处进行过滤,(2)获得“更好”的库,要么(3)它是一个功能并使您的应用程序与 IPv6 一起工作(无论如何,它可能在未来几年内需要)。

于 2010-02-01T15:10:57.557 回答