根据此链接,从 Windwos Vista 开始不再支持 NetBIOS。果然,我再也无法从网络属性中看到任何 NetBIOS 名称。
但是,当我在 Windows 7 上编写代码时,我仍然在很多地方遇到 NetBIOS 名称。例如
- 我仍然可以使用“MYDOMAIN\Harvey”登录我的机器,我相信 MYDOMAIN 是一个 NetBIOS 名称。
- 环境变量 COMPUTERNAME 和 USERDOMAIN 仍然是 NetBIOS 名称。我希望在这里看到 DNS 名称
- 我的 SQL Server Management Studio 中的 SQL Server 实例名称仍然类似于 MYMACHINE\Instance1。
我猜微软仍然保留其中的一些部分以实现向后兼容性。我想了解 Windows 7 如何将 NetBIOS 名称解析为 IP 地址。我发现这篇文章解释了NetBIOS 名称解析的工作原理,但恐怕这在 Windows 7 中不再适用。至少我没有 WINS 服务器。
我的最后一个问题是如何以编程方式进行 NetBIOS 名称解析,最好是在 C# 中。我可以使用 PInvoke。
UDAPTE
特里杜斯是对的。我可以使用 System.Net.Dns.GetHostAddresses("hostname") 来解析 NetBIOS 名称。我使用反射器来查看引擎盖下发生了什么。它从 ws2_32.dll 调用 gethostbyname()
在这里,它解释了 gethostbyname() 将进行 NetBIOS 名称解析。
- 检查本地主机名以获取匹配的名称。
- 检查 Hosts 文件以获取匹配的名称条目。
- 如果配置了 DNS 服务器,请查询它。
- 如果未找到匹配项,请尝试 NetBIOS 名称解析。
关于此链接中不支持 NetBIOS 的奥秘,我认为这只是表示该 API 不支持。 ServerFault 的人认为 Windows 7 仍然支持 NetBIOS。