【问题标题】:How to get the computer name using the IP Address [closed]如何使用 IP 地址获取计算机名称 [关闭]
【发布时间】:2014-08-08 23:51:13
【问题描述】:

我正在尝试获取当前用户的计算机名称。我可以使用 System.Net.Dns.GetHostEntry("ComputerName").Address.ToString() 获取 IP 地址,但是当我将 *ComputerName* 替换为 IPAddress 时,我收到以下错误。

不知道这样的主机

我通过运行以下命令在 IIS7 中启用了反向 DNS: Cscript.exe adsutil.vbs 设置 w3svc/EnableReverseDNS TRUE 在我服务器上的 C:\inetpub\AdminScripts 目录中。

关于我做错了什么有什么想法吗?

更新

总体目的是,这将是一个帮助台应用程序,它有助于用户轻松提供他们的计算机名称以获得帮助。

在本地一切正常,但一旦发布到服务器就无法正常工作。

【问题讨论】:

  • 该代码在本地运行。它不会告诉你远程用户的 IP;它会告诉你局域网上一台计算机的 IP。
  • 你试过 Dns.GetHostByName 吗? msdn.microsoft.com/en-us/library/…... 从该文档中,“GetHostByName 方法查询 Internet DNS 服务器以获取主机信息。如果您将空字符串作为主机名传递,此方法将检索本地计算机的标准主机名。”所以看起来如果你给它一个名字,它会相应地查找它。
  • @RobertHarvey 现在,我将客户端的 IP 地址和主机/计算机名称硬编码到 Dns.GetHostEntry(hostNameOrAddress) 中,以查看是否可以获得所需的结果。名称工作正常,但 IP 给出错误。
  • 您使用的是 64 位操作系统吗?如果您从 64 位机器获取 IP 地址,则需要循环并获取 IPv4 地址。第一个返回的地址可能是 IPv6。
  • @alykins 目标是使用 IP 地址获取主机/计算机名称。 GetHostByName 要求主机名已知。

标签: c# asp.net-mvc dns ip-address computer-name


【解决方案1】:

你可以试试这个:

  string machineName = GetMachineNameFromIPAddress(yourIPAdress);

  private static string GetMachineNameFromIPAddress(string ipAdress)
        {
            string machineName = string.Empty;
            try
            {
                IPHostEntry hostEntry = Dns.GetHostEntry(ipAdress);

                machineName = hostEntry.HostName;
            }
            catch (Exception ex)
            {
                // Machine not found...
            }
            return machineName;
        }

【讨论】:

  • 这是运行代码的机器的 Dns 条目。如果您传递了目标机器的 IP,这将起作用。
  • @moez 谢谢,但这给出了相同的错误:No such host is known 在 Dns.GetHostEntry 方法上。
【解决方案2】:

这里是如何在不同的机器上获取它。这也会为您提供 IPv4 版本。

class getIP
{
    public getIP()
    {

        IPAddress ip = Dns.GetHostEntry("whybla01").AddressList.Where(o => o.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).First();
        Console.WriteLine(ip);
        string name = Dns.GetHostEntry(ip).HostName.ToString();
        Console.WriteLine(name);
    }
}

【讨论】:

  • 一定要传递一个IP地址
  • 我用计算机名称和 IP 替换了 "whybla01",但收到了同样的错误。我开始认为这是一个需要在服务器上解决的问题。再次感谢。
  • @StackingOverflows 您是否以字符串形式(“123.123.123.123”- 您需要将其解析为真实 IPAddress)或作为 IPAddress 传递给它?但是是的,如果这对您不起作用,那么很可能是服务器上的配置错误。
  • @StackingOverflows 实际上,您可以通过制作控制台应用程序然后添加该类(这就是我为您测试它的方式)来实现这一点。如果你这样做,你可以快速/轻松地在它上面设置断点。尝试这样做并在 Console.WriteLine(ip); 上抛出一个断点;价值是什么?还是在该行之前抛出错误?
  • @StackingOverflows GetHostEntry() 接受字符串(机器的)或 IPAddress(已解析而不是字符串)。它实际上是用于设置 IPHostEntry 对象,但您可以使用它来选择主机名或 IP,就像我在示例中所做的那样,而不是创建整个 IPHostEntry 对象。一些参考msdn.microsoft.com/en-us/library/…msdn.microsoft.com/en-us/library/system.net.iphostentry.aspxmsdn.microsoft.com/en-us/library/…
【解决方案3】:

感谢所有回答这篇文章的人。

实际上,代码不是问题。我正在尝试的代码或提出的建议没有任何问题。我发现服务器DNS条目设置不正确。

也许这对其他人有帮助。

【讨论】:

  • 如何查看服务器DNS条目?
猜你喜欢
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 2011-08-14
  • 2010-09-12
  • 1970-01-01
相关资源
最近更新 更多