C# - Dns.GetHostEntry:主机名为空或不正确

问题描述 投票:0回答:2

我的电脑连接到网关为80.0.0.1的局域网 当我使用此代码时:

IPHostEntry hostEntry = Dns.GetHostEntry("80.0.0.1");
Var name = hostEntry.HostName;

它为我提供了全球互联网域的名称(hari-core-2a-xe-800-0.network.virginmedia.net),而不是我的本地主机的名称。 如何获得本地主机的正确名称。 我知道有像 10.0.x.x 这样的保留域可以用于 LAN,但我不想更改 LAN 网关。如果我可以在我的 LAN 中更改它,那么如果我的应用程序的所有用户有类似的冲突,我就不能强迫他们更改他们的。 有什么解决办法吗?

编辑: 我将LAN更改为9.0.0.1进行测试。 Dns.GetHostEntry 抛出“没有已知的主机”异常。无法获取 AP 的名称。和连接到 LAN 的 Android 设备。有什么解决办法吗? 注意:Advanced IP Scanner 也无法获取设备的名称。它将每个设备的 IP 显示为名称。

c# dns network-programming
2个回答
0
投票

如果你想获取本地主机,为什么不为本地主机创建

IPHostEntry
对象呢?

IPHostEntry hostEntry = Dns.GetHostEntry("127.0.0.1");

-1
投票

适合我的解决方案:

  1. 我将 LAN 的网关 IP 更改为 10.0.1.1 以避免冲突。
  2. 我使用 DNS.GetHostEntry 来获取名称。
  3. 如果名称为空(在某些 AP 型号的 LAN 中发生)或等于 IP 地址,我认为这是 AP 或路由器的 IP。我将尝试连接到网页 http:\[ip] 并使用网页的标题作为名称(标题将是设备型号)。 这适用于显示登录页面的设备。如果设备想要在请求中提供用户名和密码,则会出现 WebException,我可以获得包含字符串的响应。Headers["WWW-Authenticate"]:Basicrealm="X",其中 X 是一个字符串,描述该设备。
  4. 如果名称仍然为空,我会获取 MAC 地址并将其显示为名称。

您可以在 IPScanner 应用程序的 PingThread 类中找到代码(C# 和 VB.NET): http://www.mediafire.com/file/1fku7fz7ytr8p59/IPScanner.zip

© www.soinside.com 2019 - 2024. All rights reserved.