微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 C# 绕过主机文件中的别名获取 FQDN

如何解决使用 C# 绕过主机文件中的别名获取 FQDN

在域环境中,我有几个客户端通过本地主机文件中的别名引用服务器。我需要获取服务器的真实主机名。使用 Net.Dns.GetHostEntry 或 Net.Dns.Resolve 时,仅返回主机文件中的别名。

var addr = System.Net.Dns.GetHostAddresses("FileServer")[0];  // assume at least one entry
var fqdn = System.Net.Dns.GetHostEntry(addr).HostName;

使用 NSLOOKUP 的反向查找按预期工作。是否可以强制 Dns 方法忽略主机文件

解决方法

您可以在 NSLOOKUP 上调用 C# 这里有一个c#的方法。

        /// <summary>
        /// Get HostName from IPv4
        /// </summary>
        /// <param name="ipv4"></param>
        /// <returns></returns>
        public static string NslookupIP(string ipv4,string dnsServerIpv4)
        {

            if (IPAddress.TryParse(ipv4,out IPAddress ipaddress))
            {
                if (ipaddress.AddressFamily != AddressFamily.InterNetwork)
                {
                    throw new Exception("ipv4 is no a valid IPv4");
                }

            }
            else
            {
                throw new Exception("ipv4 is no a valid IPv4");
            }

            Process pProcess = new Process();
            pProcess.StartInfo.FileName = "nslookup";
            pProcess.StartInfo.Arguments = $"{ipv4}";
            pProcess.StartInfo.UseShellExecute = false;
            pProcess.StartInfo.RedirectStandardOutput = true;
            pProcess.StartInfo.CreateNoWindow = true;
            pProcess.Start();
            string cmdOutput = pProcess.StandardOutput.ReadToEnd();
            string pattern = @"^Name:\s*(?<host>(.*))$";

            foreach (Match m in Regex.Matches(cmdOutput,pattern,RegexOptions.IgnoreCase | RegexOptions.Multiline))
            {
                    return m.Groups["host"].Value;
            }

            return "";
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。