Mik*_*scu 135
注意:此解决方案仅适用于面向.NET 2.0(和更新版本)框架的情况.
using System;
using System.Net;
using System.Net.NetworkInformation;
//...
public static string GetFQDN()
{
string domainName = IPGlobalProperties.GetIPGlobalProperties().DomainName;
string hostName = Dns.GetHostName();
domainName = "." + domainName;
if(!hostName.EndsWith(domainName)) // if hostname does not already include domain name
{
hostName += domainName; // add the domain name part
}
return hostName; // return the fully qualified name
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
由于很多人评论说Sam的答案更简洁,我决定在答案中添加一些评论.
最重要的是要注意的是我给出的代码不等同于以下代码:
Dns.GetHostEntry("LocalHost").HostName
Run Code Online (Sandbox Code Playgroud)
虽然在一般情况下,当机器联网并且是域的一部分时,两种方法通常会产生相同的结果,而在其他情况下,结果会有所不同.
输出不同的情况是机器不属于域的情况.在这种情况下,Dns.GetHostEntry("LocalHost").HostName将返回,localhost而上述GetFQDN()方法将返回主机的NETBIOS名称.
当找到机器FQDN的目的是记录信息或生成报告时,这种区别很重要.大部分时间我都在日志或报告中使用此方法,这些日志或报告随后用于将信息映射回特定计算机.如果机器没有联网,则localhost标识符无用,而名称则提供所需信息.
因此,最终由每个用户决定哪种方法更适合他们的应用,具体取决于他们需要什么样的结果.但要说这个答案错误,因为不够简洁就是肤浅的.
请参阅输出不同的示例:http://ideone.com/q4S4I0
Mat*_*t Z 63
稍微简化了Miky D的代码
public static string GetLocalhostFqdn()
{
var ipProperties = IPGlobalProperties.GetIPGlobalProperties();
return string.Format("{0}.{1}", ipProperties.HostName, ipProperties.DomainName);
}
Run Code Online (Sandbox Code Playgroud)
Sam*_*Sam 27
本文将对此进行介绍.这种技术比接受的答案更简短,可能比下一个最多投票的答案更可靠.请注意,据我所知,这不使用NetBIOS名称,因此它应该适合Internet使用.
Dns.GetHostEntry("LocalHost").HostName
Run Code Online (Sandbox Code Playgroud)
Dns.GetHostByName("LocalHost").HostName
Run Code Online (Sandbox Code Playgroud)
hal*_*000 17
这是它在PowerShell中的原因:
$ipProperties = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties()
"{0}.{1}" -f $ipProperties.HostName, $ipProperties.DomainName
Run Code Online (Sandbox Code Playgroud)
小智 15
而对于Framework 1.1来说就像这样简单:
System.Net.Dns.GetHostByName("localhost").HostName
Run Code Online (Sandbox Code Playgroud)
然后删除机器NETBIOS名称以仅检索domainName
您可以尝试以下方法:
return System.Net.Dns.GetHostEntry(Environment.MachineName).HostName;
Run Code Online (Sandbox Code Playgroud)
这个shoud给你当前本地机器的FQDN(或者你可以指定任何主机).
对Matt Z的回答略有改进,以便在计算机不是域成员时不返回尾随句点:
public static string GetLocalhostFqdn()
{
var ipProperties = IPGlobalProperties.GetIPGlobalProperties();
return string.IsNullOrWhiteSpace(ipProperties.DomainName) ? ipProperties.HostName : string.Format("{0}.{1}", ipProperties.HostName, ipProperties.DomainName);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70286 次 |
| 最近记录: |