【问题标题】:Resolve NetBIOS name on Windows 7在 Windows 7 上解析 NetBIOS 名称
【发布时间】:2011-06-12 15:39:21
【问题描述】:

根据link,从 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 name resolution 的工作原理,但恐怕这在 Windows 7 中不再适用。至少我没有 WINS 服务器。

我的最后一个问题是如何以编程方式进行 NetBIOS 名称解析,最好是在 C# 中。我可以使用 PInvoke。

UDAPTE

Tridus 是对的。我可以使用 System.Net.Dns.GetHostAddresses("hostname") 来解析 NetBIOS 名称。我使用反射器来查看引擎盖下发生了什么。它正在调用gethostbyname() from ws2_32.dll

Here,它解释了 gethostbyname() 将进行 NetBIOS 名称解析。

  1. 检查本地主机名是否匹配。
  2. 检查 Hosts 文件以获取匹配的名称条目。
  3. 如果配置了 DNS 服务器,请查询它。
  4. 如果未找到匹配项,请尝试 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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 2018-09-09
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多