You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过IP地址获取计算机名而非路由器DNS名称?

问题分析与解决方案

为什么Dns.GetHostEntry返回路由器分配的域名?

  • Dns.GetHostEntry完全依赖DNS服务器完成IP到域名的解析,你的路由器作为本地DNS服务提供者,返回了它配置的带后缀的完整域名(MeinServer.speedport.ip),这是DNS层面的标准解析结果。
  • 而ping命令的名称解析逻辑更复杂:除了DNS,它会优先尝试NetBIOS/LLMNR协议(Windows本地网络的名称解析机制),直接从目标机器获取NetBIOS短名称“server”,所以能得到你想要的结果。

不修改路由器设置的解决方案

绕开DNS解析,直接利用NetBIOS/LLMNR协议获取目标机器的短名称,最可靠的方式是复用ping的解析逻辑,用C#的Ping类实现:

using System.Net.NetworkInformation;

public static string GetTargetHostname(string sIP)
{
    using (Ping ping = new Ping())
    {
        PingReply reply = ping.Send(sIP, 1000); // 设置1秒超时
        if (reply.Status != IPStatus.Success)
        {
            throw new InvalidOperationException($"无法连接到IP {sIP}: {reply.Status}");
        }

        // 提取短名称(自动去掉域名后缀)
        string resolvedName = reply.HostName;
        int dotPosition = resolvedName.IndexOf('.');
        return dotPosition > 0 ? resolvedName.Substring(0, dotPosition) : resolvedName;
    }
}

补充说明

如果目标机器的NetBIOS名称和你要的“server”一致,这个方法会直接返回正确结果。如果需要更底层的NetBIOS解析,也可以调用Windows API的NetBIOS相关函数,但Ping类的实现已经足够简洁且匹配你的场景(毕竟你已经验证ping能拿到正确名称)。

内容的提问来源于stack exchange,提问作者Novellist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:39:29