使用C#从DNS服务器返回IPv6地址

6
我正在面临一些不寻常的问题,需要将我的应用程序迁移到IPv6环境下工作。我使用.NET远程处理连接到一个供应主机的远程服务。该主机名(ipv6.dt112979.company)在我运行IPv6网络卡和DNS的Windows 2003服务器上注册为AAAA主机。但每次尝试连接该服务器时,都会收到“No such host is known.”的错误提示。我已经设置了Wireshark并未发现DNS查询正在进行。我已经执行了“ipconfig /flushdns”,但结果仍然相同。所以,我创建了一个简单的应用程序来做如下事情:
Dns.GetHostAddresses("ipv6.dt112979.company");

结果总是“找不到此主机”。

我已经执行了NSLOOKUP,结果是:

nslookup ipv6.dt112979.company
Server:  company-dev03.company
Address:  10.200.10.207

Name:    ipv6.dt112979.company
Address:  fe80::a5c3:bfde:5ece:e833

你有没有想过问题可能是什么? 我已经测试了.NET 3.5和.NET 4.0,问题是一样的。 测试是在Windows 7机器上进行的。

如果我有一个ipv6.dt112979.company的A记录,那么调用就会成功,但只返回IPv4地址。

最好的问候, Nuno Centeio


你确定在你的开发机器上安装和启用了IPV6吗?如果没有,那么收到“No Host”异常消息也就不足为奇了。 - Gregory A Beamer
@GregoryABeamer 是的,我确定。我正在打印OSSupportsIPv6并返回True。此外,我可以使用“ping -6 ipv6.dt112979.company”,并通过Wireshark证明所有通信都使用IPv6。 - Nuno Centeio
我在想...这是不是因为我没有完全启用IPv6网络?我认为我在所有主机上都使用了Teredo... - Nuno Centeio
2个回答

2

我找出了问题所在。我没有处于完全启用的IPv6网络中。我依赖于私有地址(FE80::),尽管能够进行ping和nslookup,但Winsocks2似乎不喜欢这样。

我已将Cisco UBE配置为拥有真正的IPv6网络,一切都按预期开始工作。

谢谢你的帮助。


1

Dns.GetHostAddresses 返回一个 IP 地址值的数组,请确保您正在循环遍历所有 IP 地址。

此外,如果本地计算机不支持 IPv6,则在使用 Dns.GetHostAddresses 时,IPv6 结果将从结果列表中过滤掉。您提到您已确保远程主机支持 IPv6,但您确定您的本地主机也支持吗?


我正在打印OSSupportsIPv6并返回True。 我无法遍历结果,因为该函数会抛出SocketException。 我的主机支持IPv6 ... 我能够使用IPv6 ping远程主机(在Wireshark中证明),我也能够远程桌面连接到其他IPv6主机,... - Nuno Centeio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接