Michael____ Ответов: 3

Как упорядочивается свойство "addresslist"?


Привет сообщество,

У меня нет технической проблемы, но есть вопрос, о котором я думаю, чтобы убедиться, что мое приложение работает должным образом.

До сих пор я использовал следующий код, чтобы получить IP-адрес хоста:
Dim address As System.Net.IPAddress = System.Net.Dns.GetHostEntry("computername").AddressList(0)
До сих пор возвращаемый IP-адрес всегда был правильным, но я хочу убедиться, что он действительно правильный. Я предполагаю, что вполне возможно просто использовать первую запись в списке адресов (или я ошибаюсь?).

Поэтому мой вопрос заключается в том, как будет упорядочен список адресов после сбора адресов. Это итерация устройств сетевого интерфейса в алфавитном порядке и добавление каждого IP-адреса в список адресов? Или они будут заказаны IP-октектами?

У кого-нибудь есть идея? Определяется ли она вообще?

Заранее всем спасибо!

Что я уже пробовал:

Я читал IPHostEntry.Свойство AddressList (System.Net) | Microsoft Docs[^] но не нашел ответа.

Maciej Los

Я действительно считаю, что это не приказано. Он получает адреса по мере их извлечения.

Richard Deeming

Как вы определяете "правильный" вариант? Все возвращенные адреса должны привести вас к компьютеру, если только у вас нет устаревших записей DNS.

Michael____

Под "правильным" я подразумеваю IP, который я получаю, если использую команду Ping в CMD
приставка. И это подводит меня к другому вопросу: как это происходит? Ping.exe обнаружение IP - адреса целевого компьютера, если я пингую имя компьютера, которое я никогда раньше не пинговал?

Это что-то вроде этого?:
- Ping отправляет WHOIS в виде широковещательной передачи
- Ответы DNS-сервера
- Ping теперь знает IP-адрес и пингует его

Richard Deeming

То ping утилита проверит файл "hosts", NetBios и DNS для разрешения имени машины.

Насколько я вижу, он просто выбирает первый возвращенный адрес:
Как работает ping, когда имя хоста имеет несколько ip-адресов? - Неисправность Сервера[^]

Michael____

Большое спасибо! Статья за ссылкой ответила на мой вопрос.

3 Ответов

Рейтинг:
2

MadMyche

Я действительно не верю, что для этого может быть правильный порядок, учитывая общую картину.

1. Несколько IP-адресов могут быть назначены сетевым интерфейсом.
2. Несколько сетевых интерфейсов могут быть установлены на компьютере.
3. компьютер может находиться в нескольких сетях.
4. Несколько DNS-серверов может иметь записи для одного компьютера, с разных адресов.

Так что же вы получаете с собой GetHostList это список IP-адресов, найденных им с любого DNS-сервера(ов), на который он ответил.

Примеры подключенного устройства, имеющего несколько IP-адресов:
- Еще в 90-е годы было 2 модема на 2 телефонных линии, мостовые; для увеличения пропускной способности
- Смартфон; наличие соединения 46 наряду с Wi-Fi и BlueTooth
- Ваш домашний маршрутизатор; иметь публичный IP, собственной проводной IP, а также собственной беспроводной IP

Таким образом ... если бы вы запустили приложение с помощью команды дома, вы, скорее всего, получили бы разные ответы в зависимости от того, какая сеть используется; например, Wi-Fi или hardline


Maciej Los

Очень мило объяснили!

MadMyche

Спасибо.
Я был в Сети еще в 90-е годы и должен был использовать это древнее знание для ответа... и я даже не думал об IP4 против IP6

Michael____

Большое вам спасибо за объяснение. Я знал об этих обстоятельствах, но мне казалось, что существует своего рода определенный порядок заполнения свойства AddressList.

MadMyche

Ну, я думаю, что все это будет сводиться к тому, что "источник" отвечает в первую очередь. Был ли адрес уже кэширован локально? Отвечает ли основной DNS-сервер 1-м? Помните, что для распространения DNS может потребоваться до двух дней.

Рейтинг:
11

Michael____

Большое спасибо всем вам за Вашу поддержку! Я нашел ответ здесь:

Как работает ping, когда имя хоста имеет несколько ip-адресов? - Неисправность Сервера[^]

Короче говоря:
Порядок элементов в AddressList не является случайным, но он настроен на DNS - сервере. Насколько я понимаю, это означает, что в корпоративной среде я могу использовать индекс свойства AddressList, поскольку порядок ответов DNS-сервера всегда должен быть одинаковым.


Рейтинг:
0

Maciej Los

Как я уже упоминал в комментарии к этому вопросу, я действительно считаю, что это не заказано. Он получает адрес(ы) по мере того, как он(они) извлекается(извлекаются).

Видеть Документация MSDN[^]:

Цитата:
Метод GetHostEntry запрашивает у DNS-сервера IP-адрес, связанный с именем хоста или IP-адресом.


Для eaxmple:
Dim addresses = System.Net.Dns.GetHostEntry("www.contoso.com").AddressList

возвращается:
Address    AddressFamily ScopeId           IsIPv6Multicast IsIPv6LinkLocal IsIPv6SiteLocal IsIPv6Teredo IsIPv4MappedToIPv6
3143620456 InterNetwork  6SocketException4 False           False           False           False        False 
953066548  InterNetwork  6SocketException4 False           False           False           False        False