解析 Windows 7 上的 NetBIOS 名称

发布于 2024-10-13 05:17:28 字数 1744 浏览 3 评论 0原文

根据这个链接,NetBIOS是从 Windwos Vista 开始不再支持。果然,我在网络属性中再也看不到任何 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 服务器。

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

UDAPTE

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

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

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

关于不支持 NetBIOS 的秘密,请参阅此链接< /a>,我认为这只是意味着该 API 不受支持。 ServerFault 中的人员认为 Windows 7 中仍然支持 NetBIOS。

According to this link, NetBIOS is no longer supported starting from Windwos Vista. Sure enough, I can no longer see any NetBIOS name from the network properties.

However, when I am writing codes on my Windows 7, I still encounter NetBIOS names in many places. For example

  1. I can still use "MYDOMAIN\Harvey" to logon my machine, where I believe MYDOMAIN is a NetBIOS name.
  2. The environment variables COMPUTERNAME and USERDOMAIN are still NetBIOS names. I am expecting to see a DNS names here
  3. My SQL Server instance names coming up from my SQL Server Management Studio is still something like MYMACHINE\Instance1.

I am guessing Microsoft still maintains some pieces of it for backward compatibility. I want to understand how Windows 7 going to resolve the NetBIOS name to an IP address. I found this article explaining how the NetBIOS name resolution works but I am afraid this is no longer true in Windows 7. At least there is no WINS server for me.

My last question is how do I do the NetBIOS name resolution programmatically, preferrably in C#. I am okay to use PInvoke.

UDAPTE

Tridus was right. I can use System.Net.Dns.GetHostAddresses("hostname") to resolve NetBIOS name. I used reflector to see what's happening under the hood. It is calling gethostbyname() from ws2_32.dll

Here, it explains the gethostbyname() will do NetBIOS name resolution.

  1. Check the local host name for a matching name.
  2. Check the Hosts file for a matching name entry.
  3. If a DNS server is configured, query it.
  4. If no match is found, attempt NetBIOS name-resolution.

About the mystery of NetBIOS not supported in this link, I think it just means the API is not supported. People in ServerFault think that NetBIOS is still supported in Windows 7.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉生梦死 2024-10-20 05:17:28

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

至于如何解析名称,我可以这样做:

System.Net.Dns.GetHostAddresses("hostname")

我在一个域上,所以它可能只是简单地附加一个 DNS 后缀并进行 DNS 查找,但它为我工作。尝试一下。 :)

NetBIOS itself as the old protocol might not be supported, but SMB/CIFS still is and that's why \hostname for filesharing and such still works.

As for how to resolve a name, I was able to do this:

System.Net.Dns.GetHostAddresses("hostname")

I'm on a domain so it may be simply appending a DNS suffix and doing a DNS lookup, but it worked for me. Give it a try. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文