gpt4 book ai didi

C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

转载 作者:行者123 更新时间:2023-11-30 16:06:42 25 4
gpt4 key购买 nike

我在 C# 中有一个 Windows 窗体应用程序,我正在尝试获取列表中所有客户端的主机名。下面给出的是来自此链接的 ra00l 的代码示例:GetHostEntry is very slow (我有一个类似的代码,但这个更干净)

private delegate IPHostEntry GetHostEntryHandler(string ip);
public string GetReverseDNS(string ip, int timeout)
{
try
{
GetHostEntryHandler callback = new GetHostEntryHandler(Dns.GetHostEntry);
IAsyncResult result = callback.BeginInvoke(ip,null,null);
if (result.AsyncWaitHandle.WaitOne(timeout, false))
{
return callback.EndInvoke(result).HostName;
}
else
{
return ip;
}
}
catch(Exception)
{
return ip;
}
}

当它获得网络中 Windows 机器的 IP 时,它会显示正确的主机名,前提是您输入了合理的超时时间。在我进行测试之后,我没有得到任何关于 android 和 apple 设备主机名的响应。比如下图就是我手上的路由器的DHCP Client List。它显示安卓、苹果和笔记本电脑设备。我正在使用笔记本电脑“Nathu-Laptop”,其 IP 地址为“192.168.1.106”。

enter image description here

如果我在 C# 函数中输入“192.168.1.105”,结果是“Nandwani-PC”,但如果我输入“192.168.1.103”、“192.168.1.104”、“192.168.1.101”、“192.168.1.100” ', 我没有得到任何主机名。

我也尝试过使用 nbtstat,但它只能获取网络中的笔记本电脑。

在我的 iPod 上试用时,我确保有网络事件正在进行。这是为了保持连接处于事件状态,因为它在待机时会断开与网络的连接。

编辑:

所以我发现 DNS.GetHostEntry 调用了 getaddrinfo如果启用了 IPv6,否则,请调用 gethostbyaddr并且这些函数可以从 \System32\drivers\etc\hosts 或 NETBIOS 访问数据。问题是 NETBIOS 是遗留的,对吗?但是对于移动设备呢?

最佳答案

关于 NetBIOS:

为了回答您有关 NetBIOS 和网络名称解析的具体问题,我将提供更多详细信息。如果您的网络上没有运行 dns 服务器,名称解析将仅依赖于 NetBIOS 解析。 It is a standard并在多个操作系统上实现。但是,速度不是很快。

即使我们老了,我们也不是过去的遗产和过时的

您可以查看 Microsoft support Windows 上的名称解析方式,NetBIOS 是最后一种。

但是,NetBios 名称解析并不总是在所有移动平台(例如取决于 Android 版本)上都能正常运行(如 this bug on Android which was fixed in 2014 )。如果你想提高性能,我建议你在网络中安装一个 DNS 服务器。

你试过了吗ping -a <IP address>nslookup <IP address>检查结果是否符合您的预期?

如果您的问题仍然存在,那么您可以通过上述链接调查 .Net 实现。您也可以查看 a more up to date version of .Net DNS implementation here

关于C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31849285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com