我正在使用Xamarin.mac。我需要获取本地计算机的完全限定域名。在Windows上,此代码有效:
public string GetFQDN()
{
string domainName = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
string hostName = Dns.GetHostName();
string fqdn = "";
if (!hostName.Contains(domainName))
fqdn = hostName + "." + domainName;
else
fqdn = hostName;
return fqdn;
}
在Mac上,此代码会导致此错误: System.NotSupportedException: This platform is not supported
。
那么,Xamarin.mac中的等价物是什么?或者只是在Mono?
获取计算机名称将是一个良好的开端。
答案 0 :(得分:3)
要做到这一点,你几乎可以在UNIX系统上用C做同样的事情,即用gethostname()
检索主机名,然后使用DNS查找来查找规范网络名称主人。幸运的是,System.Net已经为此做了现成的调用。以下代码应该适用于OS X和Linux(实际上,在Linux上它或多或少是hostname --fqdn
所做的):
using System;
using System.Net;
class Program {
static void Main() {
// Step 1: Get the host name
var hostname = Dns.GetHostName();
// Step 2: Perform a DNS lookup.
// Note that the lookup is not guaranteed to succeed, especially
// if the system is misconfigured. On the other hand, if that
// happens, you probably can't connect to the host by name, anyway.
var hostinfo = Dns.GetHostEntry(hostname);
// Step 3: Retrieve the canonical name.
var fqdn = hostinfo.HostName;
Console.WriteLine("FQDN: {0}", fqdn);
}
}
请注意,如果DNS配置错误,DNS查找可能会失败,或者您可能会获得相当无用的“localhost.localdomain”。
如果您希望模拟原始方法,可以使用以下代码检索域名:
var domainname = new StringBuilder(256);
Mono.Unix.Native.Syscall.getdomainname(domainname,
(ulong) domainname.Capacity - 1);
为此,您需要将Mono.Posix
程序集添加到构建中。