【发布时间】:2011-06-12 15:39:21
【问题描述】:
根据link,从 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 name resolution 的工作原理,但恐怕这在 Windows 7 中不再适用。至少我没有 WINS 服务器。
我的最后一个问题是如何以编程方式进行 NetBIOS 名称解析,最好是在 C# 中。我可以使用 PInvoke。
UDAPTE
Tridus 是对的。我可以使用 System.Net.Dns.GetHostAddresses("hostname") 来解析 NetBIOS 名称。我使用反射器来查看引擎盖下发生了什么。它正在调用gethostbyname() from ws2_32.dll
Here,它解释了 gethostbyname() 将进行 NetBIOS 名称解析。
- 检查本地主机名是否匹配。
- 检查 Hosts 文件以获取匹配的名称条目。
- 如果配置了 DNS 服务器,请查询它。
- 如果未找到匹配项,请尝试 NetBIOS 名称解析。
关于这个link不支持NetBIOS的奥秘,我想这只是表示不支持API。 People in ServerFault 认为 Windows 7 仍然支持 NetBIOS。
【问题讨论】:
-
我怀疑如果它是在 ServerFault 上,您可能会对此获得更多关注。
-
@bryanbcook 记住最后一行,我怀疑情况可能并非如此。 :-)
-
@Harvey Kwok - 所以您的目标是根据计算机名称确定本地网络上计算机的 IP 地址?
-
命名管道也使用 netbios 名称。它们存在于 Windows API 和 .NET 库中。
-
@Justin 是的,我试图找到一种方法将 NetBIOS 名称解析为 Windows 7 上的 IP 地址,然后发现 Windows 7 不再支持 NetBIOS
标签: c# windows protocols netbios