1. ホーム
  2. c#

[解決済み] C#/.NETでローカルマシンのFQDNを見つけるには?

2023-03-08 09:36:02

質問

C#でローカルマシンのFQDNを取得するにはどうすればよいですか?

どのように解決するのですか?

注意: この解決策は、.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
}

アップデイト

多くの方からのコメントで サムの回答 の方がより簡潔であるという意見が多かったので、回答にコメントを加えることにしました。

最も重要なことは、私が与えたコードが と同等ではないことです。 を次のコードに置き換えることです。

Dns.GetHostEntry("LocalHost").HostName

マシンがネットワークに接続され、ドメインの一部である場合の一般的なケースでは、両方の方法は一般的に同じ結果を生成しますが、他のシナリオでは結果が異なります。

出力が異なるシナリオは、マシンがドメインの一部でない場合です。この場合 Dns.GetHostEntry("LocalHost").HostNamelocalhost を返しますが GetFQDN() メソッドはホストの NETBIOS 名を返します。

この区別は、マシンの FQDN を見つける目的が情報を記録すること、またはレポートを生成することである場合に重要です。ほとんどの場合、私は、特定のマシンに情報をマッピングするために、ログまたはレポートでこの方法を使用してきました。もし、マシンがネットワークに接続されていない場合は localhost の識別子は役に立ちませんが、名前は必要な情報を与えてくれます。

ですから、最終的には、どの方法が自分のアプリケーションに適しているか、どんな結果を必要とするかによって、各ユーザーに任されることになります。しかし、この答えが十分に簡潔でないから間違っていると言うのは、せいぜい表面的なものです。

出力が異なるであろう例をご覧ください。 http://ideone.com/q4S4I0