C# でドメイン名を取得する
-
C#
でManagementObjectSearcher
クラスを使用してドメイン名を取得する -
C#
でSystem.Net.NetworkInformation
名前空間を使用してドメイン名を取得する -
C#
でSystem.Environment.UserDomainName
を使用してドメイン名を取得する -
C#
でSystem.DirectoryServices.ActiveDirectory
を使用してドメイン名を取得する
このチュートリアルでは、さまざまな種類のドメイン名について説明し、C# で特定のユーザーに対してドメイン名を取得する方法を示します。 ドメイン名は、Active Directory ドメインのユーザー/コンピューター セキュリティ プリンシパル、ネットワークのスタック プライマリ DNS、またはネットワーク上のコンピューター/ユーザー IP アドレスを解決する DNS 名にすることができます。
C# でこれらのドメイン名を取得し、要件を満たし、タスクに大きく依存するものを選択するには、主に 4つの方法があります。 コンピューターの Active Directory ドメインを探している場合は、コンピューターのセキュリティ プリンシパルとユーザーのプリンシパルが属するドメインを取得 (またはアクセス) する必要があります。
一般に、Active Directory との安定した接続を確立するには、この情報が必要です。 ユーザーのプリンシパルとコンピュータのプリンシパルは必ずしも同じドメインにあるとは限りません。 一方、ローカル ネットワーク スタックのプライマリ DNS サフィックスも、取得したいドメイン名である可能性があり、ほとんどの場合、それにアクセスまたは取得することは、コンピューターのセキュリティ プリンシパルとサーバーの両方が接続されているドメインと同じである可能性があります。 現在認証されているユーザーのプリンシパルが属しています。
デバイスが Active Directory で何かを行う必要がある場合でも、ローカル ネットワークのスタック プライマリ DNS サフィックスをドメイン名として LAN 経由で正常に接続することが必要な場合があります。
最後のオプションは、ドメイン名としてユーザーの IP アドレスに関心がある場合です。これは、ゼロから無限の DNS レコードの間のどこでもかまいません。また、現在処理しているリクエストを送信するために HTTP_HOST
にすることもできます。 また、Microsoft の Active Directory を使用する必要もありません。
C#
で ManagementObjectSearcher
クラスを使用してドメイン名を取得する
System.Management
名前空間に属し、ユーザーが特定のクエリに基づいて管理オブジェクト (ドメイン名は管理オブジェクト) を取得するのに役立ちます。 使いやすく、C# の初心者が管理情報やドメイン名を取得するのに最適です。
ディスク ドライブ、ネットワーク アダプター、プロセス、システム情報、ネットワーク接続、一時停止中のサービスなどに関する管理情報を列挙できます。インスタンス化時の入力として WMI クエリ (ObjectQuery
で表される) と、WMI 名前空間を表す ManagementScope
を使用します。 ユーザークエリを実行します。
using System;
using System.Management; // essential namespace
using System.Windows.Forms;
namespace domain_name {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
SelectQuery query = new SelectQuery("Win32_ComputerSystem");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) {
foreach (ManagementObject mo in searcher.Get()) {
label1.Text = mo.ToString();
}
}
}
private void label1_Click(object sender, EventArgs e) {}
}
}
出力:
C# のベテランや経験豊富な開発者は、EnumerationOptions
で追加の高度なオプションを利用することもできます。 ManagementObjectSearcher
クラスを理解するのは簡単です。 指定されたスコープで指定されたクエリを実行し、クラス オブジェクトの Get()
メソッドが呼び出されたときに ManagementObjectCollection
内のクエリに一致するドメイン名を返します。
これは、コンピューターが管理者用の Active Directory にある場合に動的にドメイン名を取得する完璧な例です。 SelectQuery
を使用してクエリを作成し、それをクラス オブジェクトに割り当て、そのオブジェクトに Get()
メソッドを適用してドメイン名を取得します。
C#
で System.Net.NetworkInformation
名前空間を使用してドメイン名を取得する
System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName
を使用して、ネットワーク スタックのプライマリ DNS サフィックスをドメイン名として取得し、コンピューター/ユーザーの IP アドレスを解決する DNS 名を取得できます。
IPGlobalProperties.DomainName
プロパティは System.Net.NetworkInformation
名前空間に属し、ローカル コンピューターが登録されているドメイン名を取得できます。
IPGlobalProperties
オブジェクトには、ローカル コンピューターに関するドメイン情報 (システム提供の型) が含まれており、System.Net.NetworkInformation
名前空間を使用すると、ネットワーク トラフィック データとネットワーク アドレス情報にアクセスできます。
ただし、ローカル コンピューター上のネットワーク インターフェイスに関する情報が必要な場合は、NetworkInterface
クラスを使用できます。
using System;
using System.Net.NetworkInformation; // essential namespace
using System.Windows.Forms;
namespace domain_name {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
string domain_name = properties.DomainName.ToString();
label1.Text = domain_name;
}
private void label1_Click(object sender, EventArgs e) {}
}
}
出力:
C#
で System.Environment.UserDomainName
を使用してドメイン名を取得する
System
名前空間の一部として、Environment.UserDomainName
プロパティは、現在のユーザーに関連付けられているネットワーク ドメイン名またはセキュリティ プリンシパルのドメインを取得します。
OS がドメイン情報の取得をサポートしていない場合、またはネットワーク ドメイン名にアクセスできない場合、サーバー、ローカル ネットワーク、またはコンピューターからドメイン名を取得するときに問題が発生する可能性があります。
ユーザー ドメイン名またはドメイン アカウントの資格情報は、\
文字とユーザー名としてフォーマットされます。 UserDomainName
プロパティを使用してユーザー名なしでユーザーのドメイン名を取得し、UserName
プロパティを使用してドメイン名なしでユーザー名を取得できます。
using System;
using System.Windows.Forms;
namespace domain_name {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
label1.Text = Environment.UserDomainName;
}
private void label1_Click(object sender, EventArgs e) {}
}
}
出力:
UserDomainName
プロパティの主な目的は、現在のユーザー (あなたを指す) の Windows アカウント名のドメイン名を取得することです。
このプロパティを介してドメイン名を取得しようとして失敗した場合、UserName
プロパティで指定されたユーザーに関連付けられたドメイン名を自動的に取得/取得しようとすることができます。
C#
で System.DirectoryServices.ActiveDirectory
を使用してドメイン名を取得する
System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain()
メソッドを使用して、Active Directory に属する現在のコンピューターのセキュリティ プリンシパルのドメインを取得できます。
ローカル コンピューターまたはコンピューターが、情報を取得しようとしているドメインの一部ではない場合、またはドメイン コントローラーが接続されていない場合、ActiveDirectoryObjectNotFoundException
例外がスローされます。
GetComputerDomain
メソッドは、System.DirectoryServices.ActiveDirectory
名前空間の一部である Domain
クラスに属します。 Domain.GetComputerDomain
メソッドを使用して、名前空間への参照を提供することにより、C# でドメイン名を取得できます。
ドメイン名を表す Domain
オブジェクトを返し、アプリケーションが実行されているドメイン資格情報とは無関係です。
using System;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.Windows.Forms;
namespace domain_name {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
label1.Text = Domain.GetComputerDomain().ToString();
}
private void label1_Click(object sender, EventArgs e) {}
}
}
出力:
信頼された、または承認されたアカウント ドメイン資格情報に関係なく、GetCurrentDomain
メソッドを使用して、コンピューターのドメイン名を簡単に取得できます。 高レベルの抽象化ドメインのオブジェクト モデルにアクセスして、Microsoft Active Directory サービスの一部としてドメイン情報を取得できます。
このチュートリアルでは、C# でドメイン名を取得する方法を説明しました。 これは、AD ドメイン名、ネットワーク ドメイン名、ローカル コンピューターのドメイン名、または C# アプリケーションのパフォーマンスを維持しながら前述のアプローチで取得できるその他の名前にすることができます。
Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.
GitHub