如何在 C# 中从 IP 获取机器的 NetBIOS 名称?
给定机器的 IP 地址,如何在 C# 中以编程方式获取其 NetBIOS 名称?我知道我可以通过“nbtstat -A ”从命令行获取它,但我正在寻找更好的解决方案。
Given the IP address of a machine how do I get its NetBIOS name programmatically in C#? I know I can get it from the command line through "nbtstat -A ', but I'm looking for a better solution.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
检查 使用 Socket 类通过 UDP 请求设备的 NetBios 名称(向下滚动)。
编辑
社区已编辑了由于原始页面出现 404 错误而导致的 URL,并将链接更改为从
web.archive.org
提取Check Using the Socket class to request the NetBios name of a device over UDP (scroll down).
EDIT
Community has edited the URL due to 404 on original page, and changed link to pull from
web.archive.org
我使用的代码是基于我在微软发现的一个例子。当它在端口 137 获得 UDP 请求的结果时,它会从答案中删除名称。它不检查名称是否是有效的 NetBIOS 名称。可以添加此内容以使其更安全。
I use this code which is based on an example I found once at microsoft. When it gets a result to a UDP request at port 137 it cuts of the names from the answer. It does not check if the names are valid NetBIOS names. This may be added to make it safer.
您可以使用 winapi gethostbyaddr 类型
AF_NETBIOS
。You could use winapi gethostbyaddr with type
AF_NETBIOS
.顺便说一句;就尝试将收到的 MAC 地址映射到组织名称 (/vendor) 而言,至少作为指导,这可能会有所帮助:
As an aside; in terms of attempting to map the received MAC Address to an Organisation Name (/vendor), at least as a guideline this might help :
我稍微完成了上面介绍的课程(NetBIOSHelper)。
它错误地为 Windows 7 提供了工作组,但为 Windows 10 提供了正确的工作组。
因为win7的nbtstat首先给出所有名称,然后给出所有组,而win10名称,组,名称,组。好吧,至少在我的网络中是这样。
还添加了另一个布尔返回参数,
它指示给定计算机是否是该组的主浏览器(MasterBrowser)。
好吧,函数现在只是返回 object[] , [string Computername,string workgroup,bool isMasterBrowser]
PS 还将循环条件更改为 while (retries > 0)
因为参数 1 被调用了 2 次
P.PS 至于第 16 个字节(变量 b1),我找到了它是什么,这里是它的值:
控制器)
:
您可以阅读有关包含第 17 个字节(变量 b2)和第 18 个字节的内容的更多信息 此处,您已经需要将它们分成几位。
一般来说,您可以在 RFC 1001 和 RFC 1002 和 这个
I slightly finished the class presented above (NetBIOSHelper).
It incorrectly gives Workgroup for Windows 7, but correctly for Windows 10.
Because nbtstat for win7 first gives all names and then all groups, and win10 name, group, name, group. Well, at least in my network.
Also added another boolean return parameter,
it indicates whether the given computer is the master browser of this group (MasterBrowser).
Well, the function now simply returns object[] , [string computername,string workgroup,bool isMasterBrowser]
P.S. Also changed the loop condition to while (retries > 0)
Because with parameter 1 it is called 2 times
P.P.S. As for the 16th byte (variable b1), I found what it is, here are its values:
controller)
for group resources:
You can read more about what contains the 17th byte (variable b2) and the 18th byte here, there you already need to divide them into bits.
In general, you can read more about NetBIOS in RFC 1001 and RFC 1002 and this