6

根据此链接,从 Windwos Vista 开始不再支持 NetBIOS。果然,我再也无法从网络属性中看到任何 NetBIOS 名称。

但是,当我在 Windows 7 上编写代码时,我仍然在很多地方遇到 NetBIOS 名称。例如

  1. 我仍然可以使用“MYDOMAIN\Harvey”登录我的机器,我相信 MYDOMAIN 是一个 NetBIOS 名称。
  2. 环境变量 COMPUTERNAME 和 USERDOMAIN 仍然是 NetBIOS 名称。我希望在这里看到 DNS 名称
  3. 我的 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 名称解析。

  1. 检查本地主机名以获取匹配的名称。
  2. 检查 Hosts 文件以获取匹配的名称条目。
  3. 如果配置了 DNS 服务器,请查询它。
  4. 如果未找到匹配项,请尝试 NetBIOS 名称解析。

关于此链接中不支持 NetBIOS 的奥秘,我认为这只是表示该 API 不支持。 ServerFault 的人认为 Windows 7 仍然支持 NetBIOS。

4

1 回答 1

5

NetBIOS 本身作为旧协议可能不受支持,但 SMB/CIFS 仍然支持,这就是为什么用于文件共享的 \hostname 等仍然有效的原因。

至于如何解析名称,我能够做到这一点:

System.Net.Dns.GetHostAddresses("主机名")

我在一个域上,所以它可能只是附加一个 DNS 后缀并进行 DNS 查找,但它对我有用。试试看。:)

于 2011-01-20T18:19:37.007 回答