GetHostAddress() не возвращает IPv6, только IPv4

При использовании Dns.GetHostAddresses("fred") в ответ возвращаются только адреса IPv4. Как получить адреса IPv6? Есть ли другой метод, который я буду использовать?

Socket.OSSupportsIPv6 возвращает значение true, и соединения IPv6 работают нормально. ОС — Windows 2008 R2, версия .Net — 3.5.


person ya23    schedule 15.09.2011    source источник
comment
Есть ли у fred DNS-запись IPv6, связанная с ним?   -  person Lazarus    schedule 15.09.2011
comment
@Lazarus: Нет, я не добавлял - я добавил запись в файл hosts, и теперь я получил адреса ipv4 и ipv6! Как узнать, есть ли записи DNS, связанные с именем хоста? Почему ping -6 fred работал нормально, а GetHostAddresses() - нет?   -  person ya23    schedule 15.09.2011
comment
@ ya23 Я подозреваю, что ping вернется к поиску IPv4, когда не сможет разрешить IPv6.   -  person Lazarus    schedule 15.09.2011
comment
Windows, возможно, делала какой-то подлый LLMNR за вашей спиной. Всегда используйте DNS.   -  person Jeremy Visser    schedule 15.09.2011
comment
@Lazarus, @ Джереми Виссер: добавление записи DNS решило проблему. Пожалуйста, опубликуйте это как ответ, чтобы я мог принять это. Было бы здорово, если бы вы также могли объяснить, почему ping так вводил в заблуждение - он прекрасно разрешал имя хоста.   -  person ya23    schedule 21.09.2011


Ответы (1)


IPv6 по-прежнему использует DNS для разрешения адресов, поэтому для того, чтобы это работало, вам необходимо добавить запись IPv6 в файл зоны для этого доменного имени. Тогда он разрешится должным образом.

Я подозреваю, что Ping вернется к IPv4, если IPv6 недоступен, а не совсем то, на что вы надеетесь, если укажете флаг «-6».

person Lazarus    schedule 21.09.2011
comment
Это не то, что я вижу. Если я делаю запрос в node.js, используя dns.lookup('google.com',{all:true}, ...), я получаю как адрес ipv6, так и адрес ipv4, где, как и в C# с Dns.GetHostAddresses("google.com"), адрес ipv6 не возвращается на той же машине. - person gman; 23.05.2016
comment
GetHostAddresses будет фильтровать IPv6-адреса, если IPv6 не установлен в системе. Учитывая, что Google не находится в вашей локальной сети, вы можете получить IPv4, сопоставленный с IPv6. У вас есть сквозной IPv6 между вами и Google? Я предполагаю, что система выполнения node.js и .Net одинакова, а если нет, то обе они настроены для одной и той же цепочки разрешения DNS. - person Lazarus; 23.05.2016
comment
Вот пример. Может быть, я делаю что-то глупое - person gman; 23.05.2016