GetHostEntry.AddressList [0] возвращает :: 1 в текущей версии Windows, даже если IPv6 выключен. Могу ли я изменить это? - PullRequest
1 голос
/ 01 февраля 2010

Я использую сторонний набор библиотек, который был глупо жестко запрограммирован для вызова GetHostEntry.AddressList [0] для локального IP-адреса. Также не написано для поддержки IPv6. Я отключил IPv6 на всех моих сетевых интерфейсах, но 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

Есть предложения? Изменение кода сторонней библиотеки мне недоступно.

1 Ответ

3 голосов
/ 01 февраля 2010

Каждый член 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 (который, скорее всего, понадобится в ближайшие несколько лет).

...