在hosts文件中使用c#绕过别名获取FQDN



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

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

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

您可以在C#上调用NSLOOKUP这是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 "";
}

最新更新