【问题标题】:Is it allowed to Substring IPHostEntry.HostName for Machine Name?是否允许将 IPHostEntry.HostName 作为机器名称的子字符串?
【发布时间】:2016-12-08 20:01:55
【问题描述】:

现在我需要通过他的 IP 地址找到一些 PC 的主机名,我用这个函数解决了这个问题:

/// <summary>
/// Returns the DNS Name of IP Address without the Domain.
/// </summary>
public string GetDNSNameFromReverseLookUp(string ip)
{
    IPAddress hostIPAddress = IPAddress.Parse(ip);
    IPHostEntry hostInfo = Dns.GetHostEntry(hostIPAddress);
    return hostInfo.HostName.Substring(0, hostInfo.HostName.IndexOf('.'));
}

但我对substring() 解决问题的方法不满意。

可以这样使用这个功能吗?还是我必须担心将来会出现一些网络问题?有没有更好(更安全)的方法来获取没有域的主机名?

我正在寻找一种更安全的网络解决方案,而不是另一种处理字符串的方法。正如我在 cmets 中提到的,我有点担心,并非每个操作系统都以以下格式返回主机名:[Hostname].[Domainname]

【问题讨论】:

  • 另一种方法是在 dot(.) 上拆分字符串,但这只会和这个一样安全 :)
  • 为什么你认为这种方法不安全?
  • 我有点担心,不是每个操作系统都以以下格式返回主机名:[Hostname].[Domainname]

标签: c# dns hostname reverse-dns


【解决方案1】:

如果 pc 未加入域,您将收到错误消息。由于(dot)没有找到,所以使用split函数是最合理的。我已经检查过了。

【讨论】:

  • 没错,但也不是函数的责任。
【解决方案2】:

试试这个

public string GetDNSNameFromReverseLookUp(string ip)
{
    IPAddress hostIPAddress = IPAddress.Parse(ip);
    IPHostEntry hostInfo = Dns.GetHostEntry(hostIPAddress);
    return hostInfo.HostName.Split('.')[0];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    相关资源
    最近更新 更多