如何解决使用 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 举报,一经查实,本站将立刻删除。